Python:二进制搜索代码无法正常工作

时间:2020-10-26 01:27:31

标签: python search binary-search

这是我的代码:

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,然后给出列表索引超出范围的错误,解决此问题也将有所帮助。

谢谢:)

2 个答案:

答案 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