为什么二进制搜索算法不起作用?
Why does binary search algorithm not work?
我从“grokking algorithms”一书中复制了代码,用于使用二进制搜索算法在列表中查找项目。代码运行良好,returns 没有错误。但是,有时它对某些数字不起作用,例如,如果我调用它来查找“1”。怎么了?
def binary_search(list, item):
low = 0
high = len(list) - 1
while low <= high:
mid = (low + high)/2
guess = list[mid]
if guess == item:
return mid
if guess > item:
high = mid + 1
else:
low = mid + 1
return None
list1 = []
for i in range (1, 101):
list1.append(i)
print(list1)
print(binary_search(list1, 1))
两个问题:
使用整数除法(所以在Python 3 中有效):mid = (low + high)//2
当guess > item
你想排除下一个范围的猜测值,但high = mid + 1
它仍然是在范围内。更正为 high = mid - 1
我从“grokking algorithms”一书中复制了代码,用于使用二进制搜索算法在列表中查找项目。代码运行良好,returns 没有错误。但是,有时它对某些数字不起作用,例如,如果我调用它来查找“1”。怎么了?
def binary_search(list, item):
low = 0
high = len(list) - 1
while low <= high:
mid = (low + high)/2
guess = list[mid]
if guess == item:
return mid
if guess > item:
high = mid + 1
else:
low = mid + 1
return None
list1 = []
for i in range (1, 101):
list1.append(i)
print(list1)
print(binary_search(list1, 1))
两个问题:
使用整数除法(所以在Python 3 中有效):
mid = (low + high)//2
当
guess > item
你想排除下一个范围的猜测值,但high = mid + 1
它仍然是在范围内。更正为high = mid - 1