下面是我用python3版本编写的二进制搜索的完整代码。 我能够:-i)创建一个列表,ii)使用冒泡排序算法对列表进行排序,iii)编写使用二进制搜索搜索数字的代码片段, 但是在搜索任何数字时(列表中存在/不存在),我的代码进入无限循环并且不会给出任何结果。 我试图查找错误,但无法调试代码。
另外,如何获取列表中的数字索引?我想过使用list.index()方法。它是否可以在排序列表的情况下工作或我的索引号输出将被错误地显示?
list=[]
item=0
while item!="99":
item=input("Enter the number, To discontinue enter 99:")
if item.isdigit(): #isdigit() checks whether input string consists of digits only
list.append(int(item)) #convert the input string into number
else:
list.append(item)
del list[-1] #Delete the number at last index of the list. It will delete "99",
#which we have used to discontinue the loop
print("The unsorted list is: ",list)
#Using bubble sort algorithm to sort the list
length=len(list)
for i in range(length):
for j in range(length-1):
if list[j]>list[j+1]:
list[j],list[j+1]=list[j+1],list[j]
print("Our sorted list is: ",list)
#Implementing binary serach algorithm
target=int(input("Enter the number you are looking for: "))
first=0 #First index of list is 0
last=len(list)-1 #Last index of list is "length of list minus 1"
mid=(first+last)//2
while first<=last:
if list[mid]<target: #If element at middle index is less than the target element,shift new lower index to one more than middle index
low=mid+1
elif list[mid]==target: #else, if element at middle index is same as target element
print("Number is found at index")
break
else:
last=mid-1
mid=(first+last)//2
if (first>last):
print("Number not found in list")
答案 0 :(得分:1)
无限循环来自
行low=mid+1
我认为你的意思是
last=mid+1
错误是案例list[mid]<target
会发生,但由于low
的更改不是last
,mid
永远不会改变,因此下一次会再次触发案例迭代。
编辑:另请注意mid
是列表中数字的索引