Quick actions

cmd+k|ctrl+k

Navigation

Languages

BusquedaBinaria

Snippet info

Language

Rust

Visibility

public

Author

alexis-enrique-martine-maganda

Created

2020-10-22T20:06:20Z

Updated

2020-10-22T20:06:20Z

fn binary_search(arr: &[i32], target_value: &i32) -> Option<usize> {
    let array_length = arr.len();
    let mut min_index: i32 = 0;
    let mut max_index: i32 = array_length as i32 - 1;

    while min_index <= max_index {
        let middle_index = ((max_index - min_index) / 2) + min_index;
        let middle_index_as_usize = middle_index as usize;
        let middle_value = &arr[middle_index_as_usize];

        if middle_value == target_value {
            return Some(middle_index_as_usize);
        }

        if middle_value < target_value {
            min_index = middle_index + 1;
        }

        if middle_value > target_value {
            max_index = middle_index - 1;
        }
    }
    None
}

fn log_binary_search_result(arr: &[i32], target_value: &i32) -> () {
    if let Some(result) = binary_search(&arr, &target_value) {
        println!("Encontrado {} en el índice {} de la matriz.", target_value, result);
    } else {
        println!("{} no se encontró en la matriz.", target_value);
    }
}

fn main() -> () {
    let arr: [i32; 20] = [
        1, 10, 20, 47, 59, 63, 75, 88, 99, 107, 120, 133, 155, 162, 176, 188, 199, 200, 210, 222,
    ];
    let target: i32 = 88;
    log_binary_search_result(&arr, &target)
}

#[cfg(test)]
mod tests {
    use super::*;

    #[test]
    fn assert_value_is_found() {
        let valid_arr = [
            1, 10, 20, 47, 59, 63, 75, 88, 99, 107, 120, 133, 155, 162, 176, 188, 199, 200, 210,
            222,
        ];
        for i in 0..valid_arr.len() {
            assert_eq!(i, binary_search(&valid_arr, &valid_arr[i]).unwrap());
        }
    }

    #[test]
    fn assert_value_is_not_found() {
        let sorted_arr = [
            1, 10, 20, 47, 59, 63, 75, 88, 99, 107, 120, 133, 155, 162, 176, 188, 199, 200, 210,
            222,
        ];
        let unsorted_arr = [
            2, 22, 48, 58, 61, 73, 84, 90, 100, 119, 132, 154, 160, 177, 187, 197, 201, 211, 2242,
        ];
        for i in 0..unsorted_arr.len() {
            assert_eq!(None, binary_search(&sorted_arr, &unsorted_arr[i]));
        }
    }
}
INFO