Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit e877687

Browse files
feat: add Swap Odd and Even Bits algorithm (TheAlgorithms#964)
1 parent 6bed9d5 commit e877687

File tree

3 files changed

+87
-12
lines changed

3 files changed

+87
-12
lines changed

‎DIRECTORY.md‎

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
* [Graph Coloring](https://github.com/TheAlgorithms/Rust/blob/master/src/backtracking/graph_coloring.rs)
77
* [Hamiltonian Cycle](https://github.com/TheAlgorithms/Rust/blob/master/src/backtracking/hamiltonian_cycle.rs)
88
* [Knight Tour](https://github.com/TheAlgorithms/Rust/blob/master/src/backtracking/knight_tour.rs)
9-
* [NQueens](https://github.com/TheAlgorithms/Rust/blob/master/src/backtracking/n_queens.rs)
9+
* [N-Queens](https://github.com/TheAlgorithms/Rust/blob/master/src/backtracking/n_queens.rs)
1010
* [Parentheses Generator](https://github.com/TheAlgorithms/Rust/blob/master/src/backtracking/parentheses_generator.rs)
1111
* [Permutations](https://github.com/TheAlgorithms/Rust/blob/master/src/backtracking/permutations.rs)
1212
* [Rat In Maze](https://github.com/TheAlgorithms/Rust/blob/master/src/backtracking/rat_in_maze.rs)
@@ -22,9 +22,10 @@
2222
* [N Bits Gray Code](https://github.com/TheAlgorithms/Rust/blob/master/src/bit_manipulation/n_bits_gray_code.rs)
2323
* [Reverse Bits](https://github.com/TheAlgorithms/Rust/blob/master/src/bit_manipulation/reverse_bits.rs)
2424
* [Sum Of Two Integers](https://github.com/TheAlgorithms/Rust/blob/master/src/bit_manipulation/sum_of_two_integers.rs)
25+
* [Swap Odd and Even Bits](https://github.com/TheAlgorithms/Rust/blob/master/src/bit_manipulation/swap_odd_even_bits.rs)
2526
* Ciphers
26-
* [Aes](https://github.com/TheAlgorithms/Rust/blob/master/src/ciphers/aes.rs)
27-
* [Another Rot13](https://github.com/TheAlgorithms/Rust/blob/master/src/ciphers/another_rot13.rs)
27+
* [AES](https://github.com/TheAlgorithms/Rust/blob/master/src/ciphers/aes.rs)
28+
* [Another ROT13](https://github.com/TheAlgorithms/Rust/blob/master/src/ciphers/another_rot13.rs)
2829
* [Baconian Cipher](https://github.com/TheAlgorithms/Rust/blob/master/src/ciphers/baconian_cipher.rs)
2930
* [Base64](https://github.com/TheAlgorithms/Rust/blob/master/src/ciphers/base64.rs)
3031
* [Blake2B](https://github.com/TheAlgorithms/Rust/blob/master/src/ciphers/blake2b.rs)
@@ -36,15 +37,15 @@
3637
* [Morse Code](https://github.com/TheAlgorithms/Rust/blob/master/src/ciphers/morse_code.rs)
3738
* [Polybius](https://github.com/TheAlgorithms/Rust/blob/master/src/ciphers/polybius.rs)
3839
* [Rail Fence](https://github.com/TheAlgorithms/Rust/blob/master/src/ciphers/rail_fence.rs)
39-
* [Rot13](https://github.com/TheAlgorithms/Rust/blob/master/src/ciphers/rot13.rs)
40+
* [ROT13](https://github.com/TheAlgorithms/Rust/blob/master/src/ciphers/rot13.rs)
4041
* [Salsa](https://github.com/TheAlgorithms/Rust/blob/master/src/ciphers/salsa.rs)
4142
* [SHA-256](https://github.com/TheAlgorithms/Rust/blob/master/src/ciphers/sha256.rs)
4243
* [SHA-3](https://github.com/TheAlgorithms/Rust/blob/master/src/ciphers/sha3.rs)
4344
* [Tea](https://github.com/TheAlgorithms/Rust/blob/master/src/ciphers/tea.rs)
44-
* [Theoretical Rot13](https://github.com/TheAlgorithms/Rust/blob/master/src/ciphers/theoretical_rot13.rs)
45+
* [Theoretical ROT13](https://github.com/TheAlgorithms/Rust/blob/master/src/ciphers/theoretical_rot13.rs)
4546
* [Transposition](https://github.com/TheAlgorithms/Rust/blob/master/src/ciphers/transposition.rs)
4647
* [Vigenere](https://github.com/TheAlgorithms/Rust/blob/master/src/ciphers/vigenere.rs)
47-
* [Xor](https://github.com/TheAlgorithms/Rust/blob/master/src/ciphers/xor.rs)
48+
* [XOR](https://github.com/TheAlgorithms/Rust/blob/master/src/ciphers/xor.rs)
4849
* Compression
4950
* [Move To Front](https://github.com/TheAlgorithms/Rust/blob/master/src/compression/move_to_front.rs)
5051
* [Run Length Encoding](https://github.com/TheAlgorithms/Rust/blob/master/src/compression/run_length_encoding.rs)
@@ -65,7 +66,7 @@
6566
* [RGB-CMYK Conversion](https://github.com/TheAlgorithms/Rust/blob/master/src/conversions/rgb_cmyk_conversion.rs)
6667
* Data Structures
6768
* [AVL Tree](https://github.com/TheAlgorithms/Rust/blob/master/src/data_structures/avl_tree.rs)
68-
* [BTree](https://github.com/TheAlgorithms/Rust/blob/master/src/data_structures/b_tree.rs)
69+
* [B-Tree](https://github.com/TheAlgorithms/Rust/blob/master/src/data_structures/b_tree.rs)
6970
* [Binary Search Tree](https://github.com/TheAlgorithms/Rust/blob/master/src/data_structures/binary_search_tree.rs)
7071
* [Fenwick Tree](https://github.com/TheAlgorithms/Rust/blob/master/src/data_structures/fenwick_tree.rs)
7172
* [Floyds Algorithm](https://github.com/TheAlgorithms/Rust/blob/master/src/data_structures/floyds_algorithm.rs)
@@ -175,14 +176,14 @@
175176
* [Lib](https://github.com/TheAlgorithms/Rust/blob/master/src/lib.rs)
176177
* Machine Learning
177178
* [Cholesky](https://github.com/TheAlgorithms/Rust/blob/master/src/machine_learning/cholesky.rs)
178-
* [KMeans](https://github.com/TheAlgorithms/Rust/blob/master/src/machine_learning/k_means.rs)
179+
* [K-Means](https://github.com/TheAlgorithms/Rust/blob/master/src/machine_learning/k_means.rs)
179180
* [Linear Regression](https://github.com/TheAlgorithms/Rust/blob/master/src/machine_learning/linear_regression.rs)
180181
* [Logistic Regression](https://github.com/TheAlgorithms/Rust/blob/master/src/machine_learning/logistic_regression.rs)
181182
* Loss Function
182183
* [Average Margin Ranking Loss](https://github.com/TheAlgorithms/Rust/blob/master/src/machine_learning/loss_function/average_margin_ranking_loss.rs)
183184
* [Hinge Loss](https://github.com/TheAlgorithms/Rust/blob/master/src/machine_learning/loss_function/hinge_loss.rs)
184185
* [Huber Loss](https://github.com/TheAlgorithms/Rust/blob/master/src/machine_learning/loss_function/huber_loss.rs)
185-
* [Kl Divergence Loss](https://github.com/TheAlgorithms/Rust/blob/master/src/machine_learning/loss_function/kl_divergence_loss.rs)
186+
* [KL Divergence Loss](https://github.com/TheAlgorithms/Rust/blob/master/src/machine_learning/loss_function/kl_divergence_loss.rs)
186187
* [Mean Absolute Error Loss](https://github.com/TheAlgorithms/Rust/blob/master/src/machine_learning/loss_function/mean_absolute_error_loss.rs)
187188
* [Mean Squared Error Loss](https://github.com/TheAlgorithms/Rust/blob/master/src/machine_learning/loss_function/mean_squared_error_loss.rs)
188189
* [Negative Log Likelihood](https://github.com/TheAlgorithms/Rust/blob/master/src/machine_learning/loss_function/negative_log_likelihood.rs)
@@ -223,7 +224,7 @@
223224
* [Frizzy Number](https://github.com/TheAlgorithms/Rust/blob/master/src/math/frizzy_number.rs)
224225
* [Gaussian Elimination](https://github.com/TheAlgorithms/Rust/blob/master/src/math/gaussian_elimination.rs)
225226
* [Gaussian Error Linear Unit](https://github.com/TheAlgorithms/Rust/blob/master/src/math/gaussian_error_linear_unit.rs)
226-
* [Gcd Of N Numbers](https://github.com/TheAlgorithms/Rust/blob/master/src/math/gcd_of_n_numbers.rs)
227+
* [GCD Of N Numbers](https://github.com/TheAlgorithms/Rust/blob/master/src/math/gcd_of_n_numbers.rs)
227228
* [Geometric Series](https://github.com/TheAlgorithms/Rust/blob/master/src/math/geometric_series.rs)
228229
* [Greatest Common Divisor](https://github.com/TheAlgorithms/Rust/blob/master/src/math/greatest_common_divisor.rs)
229230
* [Huber Loss](https://github.com/TheAlgorithms/Rust/blob/master/src/math/huber_loss.rs)
@@ -232,7 +233,7 @@
232233
* [Interpolation](https://github.com/TheAlgorithms/Rust/blob/master/src/math/interpolation.rs)
233234
* [Interquartile Range](https://github.com/TheAlgorithms/Rust/blob/master/src/math/interquartile_range.rs)
234235
* [Karatsuba Multiplication](https://github.com/TheAlgorithms/Rust/blob/master/src/math/karatsuba_multiplication.rs)
235-
* [Lcm Of N Numbers](https://github.com/TheAlgorithms/Rust/blob/master/src/math/lcm_of_n_numbers.rs)
236+
* [LCM Of N Numbers](https://github.com/TheAlgorithms/Rust/blob/master/src/math/lcm_of_n_numbers.rs)
236237
* [Leaky Relu](https://github.com/TheAlgorithms/Rust/blob/master/src/math/leaky_relu.rs)
237238
* [Least Square Approx](https://github.com/TheAlgorithms/Rust/blob/master/src/math/least_square_approx.rs)
238239
* [Linear Sieve](https://github.com/TheAlgorithms/Rust/blob/master/src/math/linear_sieve.rs)
@@ -325,7 +326,7 @@
325326
* [Patience Sort](https://github.com/TheAlgorithms/Rust/blob/master/src/sorting/patience_sort.rs)
326327
* [Pigeonhole Sort](https://github.com/TheAlgorithms/Rust/blob/master/src/sorting/pigeonhole_sort.rs)
327328
* [Quick Sort](https://github.com/TheAlgorithms/Rust/blob/master/src/sorting/quick_sort.rs)
328-
* [Quick Sort 3_ways](https://github.com/TheAlgorithms/Rust/blob/master/src/sorting/quick_sort_3_ways.rs)
329+
* [Quick Sort 3-ways](https://github.com/TheAlgorithms/Rust/blob/master/src/sorting/quick_sort_3_ways.rs)
329330
* [Radix Sort](https://github.com/TheAlgorithms/Rust/blob/master/src/sorting/radix_sort.rs)
330331
* [Selection Sort](https://github.com/TheAlgorithms/Rust/blob/master/src/sorting/selection_sort.rs)
331332
* [Shell Sort](https://github.com/TheAlgorithms/Rust/blob/master/src/sorting/shell_sort.rs)

‎src/bit_manipulation/mod.rs‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,11 @@ mod highest_set_bit;
33
mod n_bits_gray_code;
44
mod reverse_bits;
55
mod sum_of_two_integers;
6+
mod swap_odd_even_bits;
67

78
pub use counting_bits::count_set_bits;
89
pub use highest_set_bit::find_highest_set_bit;
910
pub use n_bits_gray_code::generate_gray_code;
1011
pub use reverse_bits::reverse_bits;
1112
pub use sum_of_two_integers::add_two_integers;
13+
pub use swap_odd_even_bits::swap_odd_even_bits;
Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
/// Swaps odd and even bits in an integer.
2+
///
3+
/// This function separates the even bits (0, 2, 4, 6, etc.) and odd bits (1, 3, 5, 7, etc.)
4+
/// using bitwise AND operations, then swaps them by shifting and combining with OR.
5+
///
6+
/// # Arguments
7+
///
8+
/// * `num` - A 32-bit unsigned integer
9+
///
10+
/// # Returns
11+
///
12+
/// A new integer with odd and even bits swapped
13+
///
14+
/// # Examples
15+
///
16+
/// ```
17+
/// use the_algorithms_rust::bit_manipulation::swap_odd_even_bits;
18+
///
19+
/// assert_eq!(swap_odd_even_bits(0), 0);
20+
/// assert_eq!(swap_odd_even_bits(1), 2);
21+
/// assert_eq!(swap_odd_even_bits(2), 1);
22+
/// assert_eq!(swap_odd_even_bits(3), 3);
23+
/// assert_eq!(swap_odd_even_bits(4), 8);
24+
/// assert_eq!(swap_odd_even_bits(5), 10);
25+
/// assert_eq!(swap_odd_even_bits(6), 9);
26+
/// assert_eq!(swap_odd_even_bits(23), 43);
27+
/// ```
28+
pub fn swap_odd_even_bits(num: u32) -> u32 {
29+
// Get all even bits - 0xAAAAAAAA is a 32-bit number with all even bits set to 1
30+
let even_bits = num & 0xAAAAAAAA;
31+
32+
// Get all odd bits - 0x55555555 is a 32-bit number with all odd bits set to 1
33+
let odd_bits = num & 0x55555555;
34+
35+
// Right shift even bits and left shift odd bits and swap them
36+
(even_bits >> 1) | (odd_bits << 1)
37+
}
38+
39+
#[cfg(test)]
40+
mod tests {
41+
use super::*;
42+
43+
#[test]
44+
fn test_swap_odd_even_bits() {
45+
assert_eq!(swap_odd_even_bits(0), 0);
46+
assert_eq!(swap_odd_even_bits(1), 2);
47+
assert_eq!(swap_odd_even_bits(2), 1);
48+
assert_eq!(swap_odd_even_bits(3), 3);
49+
assert_eq!(swap_odd_even_bits(4), 8);
50+
assert_eq!(swap_odd_even_bits(5), 10);
51+
assert_eq!(swap_odd_even_bits(6), 9);
52+
assert_eq!(swap_odd_even_bits(23), 43);
53+
assert_eq!(swap_odd_even_bits(24), 36);
54+
}
55+
56+
#[test]
57+
fn test_edge_cases() {
58+
// All bits set
59+
assert_eq!(swap_odd_even_bits(0xFFFFFFFF), 0xFFFFFFFF);
60+
61+
// Alternating patterns
62+
assert_eq!(swap_odd_even_bits(0xAAAAAAAA), 0x55555555);
63+
assert_eq!(swap_odd_even_bits(0x55555555), 0xAAAAAAAA);
64+
}
65+
66+
#[test]
67+
fn test_power_of_two() {
68+
assert_eq!(swap_odd_even_bits(16), 32);
69+
assert_eq!(swap_odd_even_bits(32), 16);
70+
assert_eq!(swap_odd_even_bits(64), 128);
71+
}
72+
}

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /