为什么我的逻辑不适用于二进制搜索程序?

Why my logic is not working for Binary search program?

我正在尝试使用 Python 创建我的 Binary Search 程序。但每次我都卡在 while loop 上。看来我需要为每个条件添加 break。但这会给我的整个逻辑造成混乱。

请帮助我,如何摆脱这种情况:

print("Enter your number of elements:")
num = int(input())

array = []

print("Enter your %d elements" %num)
for c in range(0, num):
    arrayNum = int(input())

    #Use "append" concept under array into python.
    array.append(arrayNum)

print("Enter a value which you want to find: ")
search = int(input())

first = int(0)

last = int(num-1)

middle = int((first + last)/2)

while first <= last:
    if array[middle] < search:
        first = int(middle+1)

    elif array[middle] == search:
        break
        print("%d is found at location" % search, (middle+1))

    else:
        last = int(middle-1)
        middle = int((first+last)/2)

if first > last:
    print("%d is not present in list"%search)

当我 运行 我的程序时,看起来 while loop 仍然是 运行ning。请帮助我。

我们将不胜感激!

三个潜在问题 -

  1. 二分查找仅适用于排序列表,您可能不会输入排序列表。要确保在开始二进制搜索之前对列表进行排序,请执行 -

    array.sort()
    

    在开始二分查找 while 循环之前执行此操作。

  2. 你的打印语句在break之后,应该放在break之前,否则不会执行。

  3. 您对 middle 的重新计算在 else 块内,但是对于 array[middle] < search 的情况您也需要重新计算中间,更好的解决方案是是将重新计算放在 else 块之外,直接放在 while 块内。

示例 -

while first <= last:
    if array[middle] < search:
        first = int(middle+1)
    elif array[middle] == search:
        print("%d is found at location" % search, (middle+1))
        break
    else:
        last = int(middle-1)
    middle = int((first+last)/2)