Перейти до контенту
← Усі приклади

Бінарний пошук

Rust Алгоритми

match на Ordering

Блок-схема за ДСТУ

ТакТакНіТакНіНіПочатокВвід v, keylo = 0hi = v.len()lo < himid = (lo + hi) / 2v[mid].cmp(&key) == Ordering::EqualПовернути Some(mid)Кінецьv[mid].cmp(&key) == Ordering::Lesslo = mid + 1hi = midПовернути NoneКінецьРисунок 1 — binary_search

Вихідний код

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
}