我正在尝试使用以下功能实现二进制搜索:
def buggy_binary_search(input, key):
low = 0
high = len(input)-1
mid = (low + high)/2
while low <= high:
if input[mid] == key:
return mid
if input[mid] > key:
high = mid - 1
else:
low = mid
return -1
上面的函数在运行时会陷入无限循环。我该如何纠正?
因为,您没有更新mid
while循环的值,所以将继续检查同一元素并进入无限循环,以纠正许多人指出的那样,请mid
在while循环中更新。
另外,您应该这样做low = mid+1
,而不应该这样做low = mid
。
完整的代码如下:
def binary_search(input, key):
low = 0
high = len(input)-1
mid = (low + high)/2
while low <= high:
mid = (low + high)/2
if input[mid] == key:
return mid
if input[mid] > key:
high = mid - 1
else:
low = mid + 1
return -1
确保输入已排序!
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句