Метод binary_search
Метод binary_search выполняет бинарный поиск
элемента в отсортированном векторе. Он возвращает
значение типа Result: вариант Ok
с индексом найденного элемента или вариант
Err с индексом, по которому элемент можно
вставить, чтобы сохранить порядок сортировки.
Параметром метод принимает ссылку на значение,
которое нужно найти.
Важно: вектор должен быть отсортирован по возрастанию, иначе результат поиска будет непредсказуемым.
Синтаксис
vec.binary_search(&value)
Пример
Давайте найдём элемент 3 в отсортированном
векторе:
fn main()
{
let vec = vec![1, 2, 3, 4, 5];
let res = vec.binary_search(&3);
println!("{:?}", res);
}
Результат выполнения кода:
Ok(2)
Пример
Давайте попробуем найти элемент 6,
которого нет в векторе:
fn main()
{
let vec = vec![1, 2, 3, 4, 5];
let res = vec.binary_search(&6);
println!("{:?}", res);
}
Результат выполнения кода:
Err(5)
Число 5 означает, что элемент 6
следует вставить по индексу 5, чтобы
сохранить порядок сортировки.
Пример
Давайте найдём строку "c" в отсортированном
векторе строк:
fn main()
{
let vec = vec!["a", "b", "c", "d", "e"];
let res = vec.binary_search(&"c");
println!("{:?}", res);
}
Результат выполнения кода:
Ok(2)
Пример
Давайте используем результат поиска для вставки элемента в нужную позицию:
fn main()
{
let mut vec = vec![1, 2, 4, 5];
let value = 3;
match vec.binary_search(&value)
{
Ok(pos) => println!("Found at {}", pos),
Err(pos) => vec.insert(pos, value),
}
println!("{:?}", vec);
}
Результат выполнения кода:
[1, 2, 3, 4, 5]