Skip to content

Instantly share code, notes, and snippets.

@rkhapov
Last active December 4, 2015 15:18
Show Gist options
  • Save rkhapov/c9507eaa2afb1683fcbb to your computer and use it in GitHub Desktop.
Save rkhapov/c9507eaa2afb1683fcbb to your computer and use it in GitHub Desktop.
binary search on python
#bin_search - бинарный поиск
#array- список значений
#val - искомое значение
#l, r - индексы поиска, r - указывает на следующий за последним элемент
#Возвращает индекс элемента и количество итераций, если элемент
#не найден, вместо индекса возвращается None
def bin_search(array, val, l, r):
#Количество итераций
c = 0
#Как только индекс первого элемента становится больше либо равен последнего
#То элемент не найден, т.к. r всегда указывает на следующий за последним
while (l < r):
#Находим индекс среднего элемента
#Не забываем о защите от переполнения
m = l + (r - l) // 2
#Если элемент со средним индексом равен искомому, возвращаем индекс
if (array[m] == val):
return (m, c)
#Если элемент со средним индексом больше искомого, значит искомый находится в "меньшей" части
if (array[m] > val):
r = m
else:
#Если элемент со средним индексом меньше искомого, значит
#искомый элемент находится в "большей" части
#l указывает на действительный элемент, да и проверять заново этот элемент не имеет смысла
l = m + 1
#Увеличиваем количество итераций
c += 1
#Элемент не найден, возвращаем None
return (None, c)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment