Комментарии 11
Найти число бинарным поиском это конечно замечательно. Но в реальности чаще возникает другая задача - как найти период некоторых чисел, которые старше некоторого порогового значения. Например, из массива в 100 чисел найти индексы ячеек от 75.
Прямо в лоб поделить массив пополам мало. Нужно найти границы интервалов. Код несложный, но интереснее поиска отдельного числа.
А да, поиск интервалов все тот же бинарный поиск.
const mid = Math.floor((left + right) / 2);
Знаменитый баг, который ломает бинарный поиск на больших массивах.
Конкретно Math.floor ничего не ломает, оно просто медленное.
Чтобы его сломать, нужны индексы более . Я не верю в такие массивы на Javascript.
Что забавно, почти в каждой статье или заметке по бинарному поиску пишут именно так) Что бы не ломать потом голову лучше писать a + (b-a)/2 , и не будет никакого переполнения.
Если написать a + (b-a)/2 - может получиться нецелый индекс. Числа-то в Javascript вещественные...
Мне помнится, что в книге «Грокаем алгоритмы» бинарный поиск расписан очень подробно. Неужели была необходимость в ещё одном объяснении, а не в ссылке на страницу книги?
Собственно, поэтому я и не пишу статьи на хабр: они будут состоять только из ссылки.
Бинарный поиск