Python:二进制搜索代码未按预期工作

Python: Binary Search Code not working as intended

这是我的代码:

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 还是任何其他数字,只要整个数组按升序排列),它 returns 'Not Found.' 它适用于所有其他数字,如果我放入一个不在数组中的数字,它会像预期的那样显示 'Not Found' ,除非该数字大于数组中的最后一个数字, 例如 105, 然后它给出列表索引超出范围的错误, 这个问题的解决方案也会有所帮助。

谢谢:)

您需要调整数组限制。

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')

这实际上是一个快速修复。 数组的索引从 0 而不是 1 开始,因此您只需要设置 low = 0 而不是 1 并更改 high = len(array) -1 因为数组的长度从 1 而不是 0 开始计算;因此 - 1