AFON // радиотехник affonya@mail.ru
← Все проекты JavaScript

Бинарный поиск

Поиск элемента в отсортированном массиве делением пополам.

JS.21 · Алгоритмы

Задача

Найти индекс значения в отсортированном массиве.

Алгоритм

Диапазон делится пополам: если середина меньше искомого — ищем правее, иначе левее.

Исходный код

⇩ Скачать 21-binarnyy-poisk.js

// Бинарный поиск
function binarySearch(a, x) {
  let lo = 0, hi = a.length - 1;
  while (lo <= hi) {
    const m = (lo + hi) >> 1;
    if (a[m] === x) return m;
    a[m] < x ? (lo = m + 1) : (hi = m - 1);
  }
  return -1;
}

console.log('индекс 7:', binarySearch([1, 3, 5, 7, 9, 11, 13], 7));
console.log('индекс 8:', binarySearch([1, 3, 5, 7, 9, 11, 13], 8));

Пояснения

Оператор >>1 делит на два с отбрасыванием дробной части. Сложность O(log n).