Ответ
Массив должен быть отсортирован в порядке возрастания (или убывания, если алгоритм адаптирован). Бинарный поиск работает только на упорядоченных данных, иначе логика деления пополам теряет смысл.
Пример с ошибкой, если массив не отсортирован:
function binarySearch(arr, target) {
let left = 0, right = arr.length - 1;
while (left <= right) {
const mid = Math.floor((left + right) / 2);
if (arr[mid] === target) return mid;
if (arr[mid] < target) left = mid + 1;
else right = mid - 1;
}
return -1;
}
// Не сработает, так как массив не отсортирован!
binarySearch([3, 1, 4, 2], 4); // Может вернуть -1 или некорректный индекс Ответ 18+ 🔞
Ах ты ж ёпта, ну и классика у нас тут подъехала! Слушай, как же меня бесит, когда люди пытаются запихнуть бинарный поиск в неотсортированный массив. Это ж как пытаться найти носки в стиралке, которая уже крутится — нихуя не выйдет, только бельё перепутаешь!
Вот смотри, вся фишка этого алгоритма — он делит данные пополам и отбрасывает ненужную половину. Но для этого надо, чтобы слева были значения меньше, а справа — больше. Иначе он просто пойдёт не в ту сторону, как пьяный в подворотне.
Вот тебе пример, от которого волосы дыбом встают:
function binarySearch(arr, target) {
let left = 0, right = arr.length - 1;
while (left <= right) {
const mid = Math.floor((left + right) / 2);
if (arr[mid] === target) return mid;
if (arr[mid] < target) left = mid + 1;
else right = mid - 1;
}
return -1;
}
// Не сработает, так как массив не отсортирован!
binarySearch([3, 1, 4, 2], 4); // Может вернуть -1 или некорректный индекс
Видишь? Кинули ему [3, 1, 4, 2], а он тупо начинает делить. Найдёт ли он четвёрку? Да хрен его знает! Может, проскочит мимо, как слепой котёнок, а потом вернёт минус один, и сидишь такой: "Ну и где мой элемент, сука?"
Это всё равно что искать книгу в библиотеке, где все тома разбросаны по полу в случайном порядке. Ты же не будешь делить пол комнаты пополам и говорить: "Ага, слева точно нет 'Войны и мира', потому что тут в углу лежит 'Колобок'!" Пиздец логика, да?
Так что запомни раз и навсегда, как отче наш: сначала сортируй, потом ищи. Иначе получишь не поиск, а ебаный рандом-генератор разочарований.