Неправильно работает бинарный поиск

Jaggernik

Новичок
Пользователь
Авг 10, 2020
2
0
1
Взял код из книги "Грокаем алгоритмы", захотел проверить сколько пераций происходит, после запуска увидел если искать число 1, то будет произведено 1220 операций, если 768, то 255 операций. Подскажите в чём проблема или я что-то не так понял.
Изменённый код:

def binary_search(list, item):
'''
В переменных low и high хранятся границы
той части списка, в которой выпоnняется
поиск
'''
low = 0 # Пока эта часть не сократится до одного элемента...
high = len(list) - 1 # ... проверяем средний элемент
a = 0

while low <= high:
mid = (low + high)
guess = list[mid]
if guess == item: # Значение найдено
print ('a =' + str(a)) # Кол-во попыток
if guess > item: # Много
high = mid - 1
a += 1
else: # Мало
low = mid + 1
a += 1
return None # Значение не существует

my_list = [i for i in range(1024)] # А теперь протестируем функцию!

binary_search(my_list, 768)
binary_search(my_list, -1)
 
Последнее редактирование:

stud_55

Модератор
Команда форума
Модератор
Апр 3, 2020
1 522
672
113
Замените эту строку:
Python:
mid = (low + high)
на такую:
Python:
mid = (low + high) // 2
 

Форум IT Специалистов