У вас есть это условие в обратном направлении:
elif collection[pivot] > target:
Переключите его, и поиск будет работать:
elif collection[pivot] < target:
Для чего это я понял, добавив распечатку в ваш поискчтобы увидеть, что происходит.Если вы сомневаетесь, добавьте распечатку:
>>> binary([1, 2, 3], 1)
(min=0, max=2, pivot=1)
(min=2, max=2, pivot=2)
^ Oops
# After fixing...
>>> binary([1, 2, 3], 1)
(min=0, max=2, pivot=1)
(min=0, max=0, pivot=0)
Кстати, встроенный модуль bisect выполняет двоичный поиск.Вы не должны писать свои собственные, если вы не делаете это для образовательной ценности.