Last active
December 4, 2015 15:18
-
-
Save rkhapov/c9507eaa2afb1683fcbb to your computer and use it in GitHub Desktop.
binary search on python
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#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