Используйте границы диапазона и сравнение с его серединой. На каждом шаге отбрасывается половина элементов; для 9 в данном массиве результат равен 4.
Поиск элемента в отсортированном массиве методом бинарного поиска
Используйте границы диапазона и сравнение с его серединой. На каждом шаге отбрасывается половина элементов; для 9 в данном массиве результат равен 4.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Дана упорядоченная последовательность чисел. Требуется определить позицию заданного значения в массиве: если значение присутствует — вернуть его индекс, если отсутствует — вернуть -1.
const sortedArr = [-1, 0, 3, 5, 9, 12];
console.log(binarySearch(sortedArr, 9)); // 4
Ответ
Используйте границы диапазона и сравнение с его серединой. На каждом шаге отбрасывается половина элементов; для 9 в данном массиве результат равен 4.
function binarySearch(array, target) {
let left = 0, right = array.length - 1;
while (left <= right) {
const mid = left + Math.floor((right - left) / 2);
if (array[mid] === target) return mid;
if (array[mid] < target) left = mid + 1;
else right = mid - 1;
}
return -1;
}
Массив должен быть отсортирован по возрастанию; пустой массив даёт -1. При дубликатах возвращается один из подходящих индексов, не обязательно первый. Время O(log n), дополнительная память O(1). Проверять сортировку внутри каждого поиска не нужно: это превратит операцию в линейную.