【发布时间】:2019-02-07 23:13:56
【问题描述】:
我是 Python 新手,正在实现二进制搜索算法。这是算法:
def binary_search(list, item):
low = 0
high = len(list)-1
while low <= high:
mid = (low + high)
guess = list[mid]
if guess == item:
return mid
if guess > item:
high = mid - 1
else:
low = mid + 1
return None
我的问题是关于mid = (low + high) 行。无论我使用mid = (low + high) 还是mid = (low + high)/2,该算法都会为数组中的任何项目返回正确的索引位置。这是为什么?我到处寻找这个特定问题的解释,但找不到。我所发现的只是 Python 3 会自动舍入不可整除的数字,因此对于具有奇数个元素的数组,例如 13,中间元素的索引将为 6。但是上面的算法如何得到每次都除以2而不是中间索引元素?
【问题讨论】:
-
在每一步打印出高、低和中,看看发生了什么。