diff --git a/src/lib.rs b/src/lib.rs index dcf5610..4f6a831 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,15 +1,24 @@ - +mod search; mod sorting; #[cfg(test)] mod tests { use super::*; - use sorting::bubble::*; + use sorting::bubble_sort; #[test] fn test_bubble() { - let mut num = [4,3,2,1]; + let mut num = [4, 3, 2, 1]; bubble_sort(&mut num); - assert_eq!(num, [1,2,3,4]) + assert_eq!(num, [1, 2, 3, 4]) + } + + use search::binary_search; + #[test] + fn test_binary_search() { + let test_arr = [1, 5, 6, 7, 22, 46, 76, 88, 96, 100]; + for i in 0..test_arr.len() { + assert_eq!(i, binary_search(&test_arr, test_arr[i]).unwrap()) + } } } diff --git a/src/main.rs b/src/main.rs index 55da955..5aed989 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,4 +1,5 @@ mod sorting; +mod search; fn main() { diff --git a/src/search/binary_search.rs b/src/search/binary_search.rs new file mode 100644 index 0000000..f888ccc --- /dev/null +++ b/src/search/binary_search.rs @@ -0,0 +1,19 @@ +pub fn binary_search(arr: &[i32], target: i32) -> Option { + let mut low = 0; + let mut high = arr.len() as i32 - 1; + while low <= high { + let mid = (high + low) / 2; + let m_index = mid as usize; + let val = &arr[m_index]; + if *val == target { + return Some(m_index); + } + if *val < target { + low = mid + 1 + } + if *val > target { + high = mid - 1 + } + } + None +} diff --git a/src/search/mod.rs b/src/search/mod.rs new file mode 100644 index 0000000..027e154 --- /dev/null +++ b/src/search/mod.rs @@ -0,0 +1,2 @@ +pub mod binary_search; +pub use binary_search::*; diff --git a/src/sorting.rs b/src/sorting.rs deleted file mode 100644 index 5826bd4..0000000 --- a/src/sorting.rs +++ /dev/null @@ -1 +0,0 @@ -pub mod bubble; diff --git a/src/sorting/mod.rs b/src/sorting/mod.rs new file mode 100644 index 0000000..f6fac40 --- /dev/null +++ b/src/sorting/mod.rs @@ -0,0 +1,2 @@ +pub mod bubble; +pub use bubble::*;