【问题标题】:Python: Binary Search Code not working as intendedPython:二进制搜索代码未按预期工作
【发布时间】:2020-10-26 09:42:03
【问题描述】:

这是我的代码:

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,那么它会给出列表索引超出范围错误,解决这个问题也会有所帮助。

谢谢:)

【问题讨论】:

    标签: python search binary-search


    【解决方案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')
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2023-02-21
        • 2017-05-12
        • 2018-10-17
        • 1970-01-01
        • 2011-10-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多