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

时间:2015-07-14 04:48:23

标签: python while-loop binary-search

我尝试使用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仍在运行。请帮帮我。

帮助会受到赞赏!

1 个答案:

答案 0 :(得分:2)

三个潜在问题 -

  1. 二进制搜索仅适用于已排序的列表,您可能无法输入已排序的列表。要确保在开始二进制搜索之前对列表进行排序,请执行 -

    array.sort()
    

    在循环开始二元搜索之前执行此操作。

  2. 你的打印声明是在休息之后,你应该在休息之前把它放,否则它不会被执行。

  3. 您重新计算middle位于else区块内,但您需要重新计算array[middle] < search的情况,更好的解决办法是在else块外直接重新计算,直接在while块内。

  4. 示例 -

    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)