我是python的新手,所以我不知道我是否遗漏了一些明显的东西(例如冒号或某个地方的某个时期)。
我试图使这个二进制搜索算法工作,但如果我传递一个大于3个元素的列表,程序将进入无限递归制动和python中的最大设置。
基本案例工作正常。
[]和[element1]列表通过。
[element1,element2,element3,...,element99]卡住了......
以下是代码:
{{1}}
感谢。
答案 0 :(得分:1)
我们显然必须假设数据已经排序,否则二进制搜索是毫无意义的。首先,您错过了元素何时等于枢轴本身的情况:
if element == pylist[mid]:
此外,在此块中:
elif len(pylist) == 1 and pylist[0] == element:
return True
你没有处理剩下一个元素并且不你想要的元素的情况,在这种情况下你应该返回False。
以下是完全更正的代码:
def binsearch(pylist, element):
pylist = sorted(pylist) # Just to be sure
if len(pylist) == 0:
return False
if len(pylist) == 1:
if pylist[0] == element:
return True
else:
return False
else:
mid = len(pylist) // 2
if element == pylist[mid]:
return True
elif element > pylist[mid]:
return binsearch(pylist[mid:], element)
else:
return binsearch(pylist[:mid], element)
肯定有空间使这段代码更有效率,但这只是纠正了代码。
答案 1 :(得分:0)
好的。必须使用冒泡排序功能来排序没有set()函数的随机列表。
def binsearch(pylist, element):
if len(pylist) == 0:
return False
else:
v_mid = len(pylist) // 2
if pylist[v_mid] == element:
return True
else:
if element > pylist[v_mid]:
return binsearch(pylist[v_mid + 1:], element)
else:
return binsearch(pylist[:v_mid], element)