我收到错误
运行以下代码时RuntimeError:超出最大递归深度
:
def partition(lst, start, end):
new_lst=lst[start:end]
pos=0
if len(lst)<2:
return None
for i in range(len(new_lst)):
if new_lst[i] < new_lst[-1]:
new_lst[i],new_lst[pos]=new_lst[pos],new_lst[i]
pos+=1
elif i==(len(new_lst)-1):
new_lst[-1],new_lst[pos]=new_lst[pos],new_lst[-1]
return pos
def quick_sort_recursive(lst, start, end):
if start<end:
pos=partition(lst, start, end)
quick_sort_recursive(lst, start, pos-1)
quick_sort_recursive(lst, pos+1, end)
答案 0 :(得分:0)
我的猜测是你没有修改原始列表......这段代码:
def partition(lst, start, end):
new_lst=lst[start:end]
可能你认为这只是给你一个原始列表的视图,但这实际上创建了一个副本。然后你对它进行分区并发回一个位置......但是这个分区列表就被丢弃了。
您可以修改原始列表,但您需要这样做。最简单的方法可能就是将其插回:
new_lst = lst[start:end]
# do some stuff
lst[start:end] = new_lst
我不确定这是什么给你递归,但是每个递归调用都有前一层的期望,而且在这里无效。