Skip to content
← All examples

Binary search

Rust Algorithms

match on Ordering

Flowchart (ISO 5807)

YesYesNoYesNoNoStartInput v, keylo = 0hi = v.len()lo < himid = (lo + hi) / 2v[mid].cmp(&key) == Ordering::EqualReturn Some(mid)Endv[mid].cmp(&key) == Ordering::Lesslo = mid + 1hi = midReturn NoneEndFigure 1 — binary_search

Source code

use std::cmp::Ordering;

fn binary_search(v: &[i32], key: i32) -> Option<usize> {
    let mut lo = 0;
    let mut hi = v.len();
    while lo < hi {
        let mid = (lo + hi) / 2;
        match v[mid].cmp(&key) {
            Ordering::Equal => return Some(mid),
            Ordering::Less => lo = mid + 1,
            Ordering::Greater => hi = mid,
        }
    }
    None
}