如何在python中使用二进制搜索算法(不实现任何函数)搜索数字

时间:2016-06-16 19:09:26

标签: python algorithm search binary

下面是我用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")  

1 个答案:

答案 0 :(得分:1)

无限循环来自

low=mid+1

我认为你的意思是

last=mid+1

错误是案例list[mid]<target会发生,但由于low的更改不是lastmid永远不会改变,因此下一次会再次触发案例迭代。

编辑:另请注意mid是列表中数字的索引