Skip to content

Instantly share code, notes, and snippets.

@mykhailokrainik
Last active February 1, 2023 21:38
Show Gist options
  • Save mykhailokrainik/2ffe7316c6b66f8344c7ddf6b55c1fdb to your computer and use it in GitHub Desktop.
Save mykhailokrainik/2ffe7316c6b66f8344c7ddf6b55c1fdb to your computer and use it in GitHub Desktop.
Implementation of the binary search algorithm (logarithmic search)
use std::cmp::Ordering;
pub fn binary_search(arr: &[i32], value: i32) -> Option<usize> {
let mut mid;
let mut low = 0;
let high = arr.len();
while low <= high {
mid = low + (high - low) / 2;
match arr.get(mid) {
Some(arr_value) => match value.cmp(&arr_value) {
Ordering::Less => low = mid - 1,
Ordering::Greater => low = mid + 1,
Ordering::Equal => return Some(mid),
},
None => return None,
}
}
return None;
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn it_case_0_for_binary_search() {
let result = binary_search(&[], 10);
assert_eq!(result, None);
}
#[test]
fn it_case_1_for_binary_search() {
let result = binary_search(&[3], 3);
assert_eq!(result, Some(0));
}
#[test]
fn it_case_2_for_binary_search() {
let result = binary_search(&[3, 5], 5);
assert_eq!(result, Some(1));
}
#[test]
fn it_case_n_for_binary_search() {
let result = binary_search(&[2, 3, 4, 5, 10, 16, 20], 16);
assert_eq!(result, Some(5));
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment