【发布时间】:2021-03-22 05:32:52
【问题描述】:
我在学习二分搜索时遇到了麻烦。这是我的代码:
a = [1, 2, 4, 6, 7, 8, 11, 13, 23, 26, 28, 32, 36, 402, 2403, 3340, 4400]
def binary_search(list, whattosearch):
start_index = 1
end_index = len(list) - 1
while True:
mid_index = (end_index - start_index) // 2
if mid_index < start_index or mid_index > end_index or mid_index < 0:
return False
mid_element = list[mid_index]
if mid_element == whattosearch:
return True
if mid_element < whattosearch:
start_index = mid_index
else:
end_index = mid_index
if __name__ == '__main__':
print(binary_search(a, 8))
我得到 'False' 作为输出。有人可以帮帮我吗?
【问题讨论】:
-
当你运行代码时,你会到达一个点,你的结束索引是 7,你的开始索引是 3,你将中点设置为 (end - start) // 2,所以 (7 - 3 ) // 2 thats 4 // 2 which is 2. 所以你现在的中点小于起点。你的代码说如果 mid 小于 start return false
-
您应该将中点设置为起点+终点与起点之间的差除以2。类似
mid_index = start_index + ((end_index - start_index) // 2)
标签: python list function search binary