请看这段代码:
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)
时,我得到了 true,当我输入 chop(a, 2)
时,我得到了 true ,但是当我输入 chop(a, 3)
时,我没有得到答案,只有 Python Shell 中的空行。
有人知道发生了什么事吗?
最佳答案
我猜这是你的错误:
low = mid + 1
您的 while 循环使用变量 lo
,并且您在 while 循环中定义了一个名为 low
的新变量。本质上,您永远不会更新您的 lo
变量。
将该行更改为:
lo = mid + 1
并且您的算法应该有效。
关于python - python奇怪行为中的二进制搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9918348/