Деление на ноль

Двоичный поиск: интерактивная анимация (Binary Search)

Быстрый поиск элемента в отсортированном массиве методом деления пополам

Визуализация

Искомое: В случайном месте
Искомое:
Ищем: 0
Легенда цветов
в диапазоне середина (mid) найден отброшено
Нажмите "Пуск" или листайте по шагам.
Диапазон [lo, hi]: - Сравнения: 0 Шаг: 0 / 0 Сложность по времени: -

Как работает двоичный поиск

Идея алгоритма. Чтобы быстро найти слово в словаре, мы открываем его ровно посередине. Если нужное слово по алфавиту идет раньше - отбрасываем правую половину словаря. Если позже - отбрасываем левую. Затем снова открываем оставшуюся часть посередине. И так до тех пор, пока не найдем искомое.

Сложность алгоритма

Сложность - это оценка того, как быстро растет потребление ресурса при росте длины массива n. Оценки записывают через O-нотацию - у нас есть отдельная анимация о том, как читать такие записи.

По времени

Показывает, как растет число операций (здесь это сравнения элементов) при росте n. Двоичный поиск работает за логарифмическое время O(log n). С каждым шагом количество оставшихся элементов уменьшается ровно в два раза.

Случай Время Комментарий
Лучший (элемент ровно в середине) O(1) Нашли на первом же делении массива пополам
Средний O(log n) Диапазон стабильно сужается вдвое на каждом шаге
Худший (элемента нет или он на краю) O(log n) Делим пополам, пока диапазон [lo, hi] не схлопнется

По памяти

Показывает, сколько дополнительной памяти нужно алгоритму помимо самого массива.

Характеристика Оценка Комментарий
Дополнительная память O(1) Хватает двух переменных для хранения границ lo и hi

Требования к данным

Характеристика Оценка Комментарий
Требует сортировки? Да Алгоритм обязан получать на вход отсортированный массив. Если данные не отсортированы, то "отбросить половину" нельзя, и придется использовать линейный поиск.

Примеры реализации двоичного поиска (Binary Search)