Бинарный поиск
Поиск в отсортированном массиве делением пополам.
Сигнатура
O(log n)Бинарный поиск работает только на отсортированном массиве. Он сравнивает искомое значение со средним элементом и каждый раз отбрасывает половину диапазона, поэтому число шагов растёт логарифмически.
Сложность: время O(log n); память: O(1) для итеративной версии, O(log n) для рекурсивной. Применяйте, когда данные отсортированы и поиск выполняется часто.
def binary_search(a, target):
lo, hi = 0, len(a) - 1
while lo <= hi:
mid = (lo + hi) // 2
if a[mid] == target:
return mid
if a[mid] < target:
lo = mid + 1
else:
hi = mid - 1
return -1
print(binary_search([1, 3, 5, 7, 9], 7)) # 3