这是我的代码:
array = [14, 17, 25, 26, 56, 59, 78, 90, 99, 104]
low = 1
high = len(array)
found = False
item = int(input('Henlo, giv number pls :)\n'))
while high >= low and found == False:
middle = int((low + high) / 2)
if item < array[middle]:
high = middle - 1
elif item == array[middle]:
found = True
else:
low = middle + 1
if found == True:
print('Found')
else:
print('Not Found')
它可以工作,但是每当我尝试搜索数组中的第一项(无论是14还是任何其他数字,只要整个数组以升序排列),它都会返回“未找到”。它适用于所有其他数字,如果我将一个数字放在数组中没有的那个数字中,它会像应有的那样显示“未找到”,例如,当数字大于数组中的最后一个数字时, 105,然后给出列表索引超出范围的错误,解决此问题也将有所帮助。
谢谢:)
答案 0 :(得分:1)
您需要调整阵列限制。
array = [14, 17, 25, 26, 56, 59, 78, 90, 99, 104]
print(array)
low = 0 # minimum index in array
high = len(array)-1 # maximum index in array
found = False
item = int(input('Henlo, giv number pls :)\n'))
while high >= low and found == False:
middle = int((low + high) / 2)
if item < array[middle]:
high = middle - 1
elif item == array[middle]:
found = True
else:
low = middle + 1
if found == True:
print('Found')
else:
print('Not Found')
答案 1 :(得分:1)
这实际上是一个快速修复。
数组从0而不是1开始索引,因此您只需要设置low = 0
而不是1并更改high = len(array) -1
,因为数组的长度从1开始而不是从0开始;因此- 1