二进制搜索不工作时,它应该b

2024-05-23 23:32:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个二进制搜索,从用户给定的电子邮件输入中搜索列表。我没有得到任何错误,也没有从中得到任何输出。我看不出哪里出了问题?你知道吗

def BubbleSort(logindata):
    NoSwaps = 1
    N = len(logindata)
    logindata = list(logindata)
    while NoSwaps == 1:
        Count = 1
        NoSwaps = 0
        for Count in range(N-1):
            if logindata[Count] > logindata[Count+1]:
                temp = logindata[Count]
                logindata[Count] = logindata[Count+1]
                logindata[Count+1]=temp
                NoSwaps=1
    return tuple(logindata)

def BinarySearch(logindata,ItemSought):
    First=0
    Last=len(logindata)-1
    ItemFound = False
    SearchFailed = False
    while ItemFound == False or SearchFailed == False:
        Midpoint = (First + Last) // 2
        if logindata[Midpoint] == ItemSought:
            print("Item Found")
            ItemFound = True
            print("Item Found")
            break

        elif logindata[Midpoint][0] > ItemSought:
            Last = Midpoint - 1

        else:
            First = Midpoint + 1


if __name__ == "__main__":
    logindata=["tom@gmail.com","Password1"],["harry@gmail.com","Password2"],["jake@gmail.com","Password3"]
    logindata=BubbleSort(logindata)
    print(logindata)
    ItemSought=input("Enter username")
    BinarySearch(logindata,ItemSought)

Tags: comfalseifdefcountgmailfirstlast
2条回答

if logindata[Midpoint] == ItemSought:

将列表与字符串进行比较。所以我认为你需要

 if logindata[Midpoint][0] == ItemSought:

你永远不会终止搜索。如果该项不在列表中,则到达稳定的中点并无限循环。如果你找到了这个项目,你就无限地在上循环(见耶文的答案)。你知道吗

我用你在这里看到的补充来追踪它:

SearchFailed = False
iter = 0
while iter < 10 and (ItemFound == False or SearchFailed == False):
    iter += 1
    Midpoint = (First + Last) // 2
    print (First, Midpoint, Last, ItemSought)
    if logindata[Midpoint] == ItemSought:

请注意,您永远不会更改SearchFailed。例如,当我搜索“harry”时,循环会在(0,-1,-2)处找到一个稳定的无限点,比如First、Middle和Last。你知道吗

这足以让你自己修好吗?你知道吗

相关问题 更多 >