Недавно мы рассмотрели алгоритм линейного поиска. Он заключается в последовательном переборе элементов до нахождения нужного.
Однако этот метод имеет существенный недостаток: если нужно найти число в большом списке, придется проверить каждый элемент. Например, при поиске миллиона в списке из миллиона чисел потребуется выполнить миллион итераций.
Но что, если каждый раз отсекать половину списка? Тогда на поиск уйдет значительно меньше шагов.
Для этого используется бинарный поиск. Его суть в том, что на каждом этапе выбирается средний элемент списка. Если искомое значение больше среднего, поиск продолжается в левой части. Если меньше — в правой.
Важно отметить, что этот метод работает только с отсортированными списками. Вот пример алгоритма бинарного поиска: def binary_search(digit_list: list[int], need_digit: int) -> tuple[int | None, int]:
"""
Бинарный поиск по списку. Если значения нет -None
:param digit_list: список чисел для поиска
:type digit_list: list[int