我写了以下代码:
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个部分。
我无法实现这一点。
任何帮助将不胜感激。
答案 0 :(得分:2)
你需要将列表分为3个部分,因为你需要两个中间:upper_middle和lower_middle。您需要为if添加更多子句。如果它小于中下部,则它是前三分之一,如果它高于上部则是最后三分之一,否则,它在中间三分之一。
请记住,即使这对编程来说是一个很好的练习,但由于函数的顺序保持不变(log n),因此效率并不高。