Python - 改变我的二进制搜索功能

时间:2013-04-09 19:06:05

标签: python search binary

我写了以下代码:

def binary_search(key,lst):
    """ iterative binary search
        lst better be sorted for binary search to work"""
    n=len(lst)
    lower=0
    upper=n-1
    outcome=None   # default value
    while lower<=upper:
        middle=(upper+lower)//2
        if key==lst[middle].name:    # item found
            outcome=lst[middle]
            break  # gets out of the loop if key was found
        elif key<lst[middle].name:   # item cannot be in top half
            upper=middle-1
        else:        # item cannot be in bottom half
            lower=middle+1           
    return outcome  

我试图改变它,以便将列表分成3个部分而不是2个部分。 我的意思是它不再是二进制搜索,但是对于每次迭代,算法会将列表分成3个部分。

我无法实现这一点。

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:2)

你需要将列表分为3个部分,因为你需要两个中间:upper_middle和lower_middle。您需要为if添加更多子句。如果它小于中下部,则它是前三分之一,如果它高于上部则是最后三分之一,否则,它在中间三分之一。

请记住,即使这对编程来说是一个很好的练习,但由于函数的顺序保持不变(log n),因此效率并不高。