где ошибка в бинарном поиске?
def binary_search(array, item):
low = 0
high = len(array) - 1
while low < high:
mid = (low + high)//2
solve = array[mid]
if solve == item:
return mid
if solve > item:
high = solve - 1
else:
low = solve + 1
return None
haha = [2,3,4,5,12,20,32]
print(binary_search(haha, 12))
Все должно работать правильно, у меня отсортированный массив, число 3,4,5 из массива алгоритм находит, но почему при поиске 12,20,32 пишет что таких чисел в массиве нет. Так же первое число массива, если я ставлю low<=high, выписывает ошибку что array[mid] выходит за рамки.
Функция простая, при входе даешь массив и число, которое найти надо, при выходе получаешь позицию этого числа в массиве
Ответы (1 шт):
Автор решения: Алексей Р
→ Ссылка
Нужно поменять переменную с solve на mid при вычислении low и high, а также заменить < на <= в while
def binary_search(array, item):
low = 0
high = len(array) - 1
while low <= high:
mid = (low + high) // 2
solve = array[mid]
if solve == item:
return mid
if solve > item:
high = mid - 1
else:
low = mid + 1
return None
haha = [2, 3, 4, 5, 12, 20, 32]
print(binary_search(haha, 12)) # 4