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

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

Обновлено 19 июля 2026
На этой странице
ИнтуицияКак это работаетСложностьРеализацияЧастые ошибкиИсточник
01
ИНТУИЦИЯ

Понять идею до написания кода

Сравните цель со средним элементом. Если цель меньше — продолжайте только в левой половине, если больше — в правой. Поэтому диапазон поиска уменьшается примерно вдвое после каждого сравнения.

Запомните главное

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

02
ПОШАГОВО

Как это работает

ИНТЕРАКТИВНЫЙ РАЗБОР

Найдём элемент в массиве

10
41
72
103
134
165
196
227
258
13 = 13. Элемент найден по индексу 4.
03
АНАЛИЗ

Время и память

Лучший случайO(1)
Средний случайO(log n)
Худший случайO(log n)
Доп. памятьO(1) итеративно

Оценка зависит от модели данных и выбранной реализации. Здесь указаны стандартные оценки для описанного варианта алгоритма.

04
РЕАЛИЗАЦИЯ

Код без скрытых шагов

def binary_search(items, target):
    left, right = 0, len(items) - 1

    while left <= right:
        mid = left + (right - left) // 2
        if items[mid] == target:
            return mid
        if items[mid] < target:
            left = mid + 1
        else:
            right = mid - 1

    return -1
05
ПРОВЕРКА ПОНИМАНИЯ

Частые ошибки

01

Запускать поиск на неотсортированных данных.

02

Неправильно обновлять границы и получать бесконечный цикл.

03

Путать поиск любого совпадения с поиском первой или последней позиции.

06
ПРОВЕРКА ФАКТОВ

Основной источник

CP-Algorithms · Binary Search