Это потому, что ваш алгоритм не является двоичным поиском.
mid = (low + high)
Так как высокий начинается с len(arr) - 1
, а низкий всегда начинается с 0
средний всегда начинается с len(arr) - 1
.
if guess > item:
high = mid - 1
В этом случае при следующем пересчете mid
значение mid
уменьшается на единицу.Так что, если предположение слишком велико, оно падает на один элементДело в том, что mid
всегда начинается с len(arr) - 1
, это всегда будет True
.guess
всегда будет начинаться как самый большой элемент, а затем понижаться один за другим.Пока вы не нажмете:
if guess == item:
return mid
В этом случае вы просто возвращаете предмет.Ваш алгоритм ищет элемент линейно от последнего элемента до первого по одному.
Если вы на самом деле добавите print(low, high, mid)
, вы получите такой вывод:
0 6 6
0 5 5
0 4 4
0 3 3
0 2 2
0 1 1
0 0 0