Пожалуйста, посмотрите на этот код:бинарный поиск в питона странное поведение
def chop(array, search):
lo = 0
high = len(array) - 1
while lo <= high:
mid = (high + lo) /2
if array[mid] == search:
return 'true'
elif search > array[mid]:
low = mid + 1
else:
high = mid - 1
return 'false'
if __name__ == '__main__':
a = [1,2,3,4,5,6,7,8,9,10]
print chop(a, 3)
я написал небольшой скрипт, который, как предполагается, для поиска числа в массиве - регулярный бинарный поиск. Поэтому я запускаю скрипт, и, например, когда я помещаю chop(a, 1)
, я получаю истинное значение, когда я помещаю chop(a, 2)
. Я получаю истинное значение, но когда я помещаю chop(a, 3)
, я не получаю ответ, просто пустую строку в оболочке Python.
Есть ли у кого-нибудь идеи о том, что происходит?
'' true'' и '' false''? Как насчет ['True' и' False'] (http://docs.python.org/library/stdtypes.html#boolean-values)? – huon
Ваш двоичный поиск останавливается при середине = 1. Попробуйте напечатать значение середины в вашем цикле. –
Существует аналогичная функция в модуле bisect –