我尝试使用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
仍在运行。请帮帮我。
帮助会受到赞赏!
答案 0 :(得分:2)
三个潜在问题 -
二进制搜索仅适用于已排序的列表,您可能无法输入已排序的列表。要确保在开始二进制搜索之前对列表进行排序,请执行 -
array.sort()
在循环开始二元搜索之前执行此操作。
你的打印声明是在休息之后,你应该在休息之前把它放,否则它不会被执行。
您重新计算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)