Python quicksort递归

时间:2013-11-22 16:01:07

标签: python recursion quicksort

我收到错误

  

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)

1 个答案:

答案 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

我不确定这是什么给你递归,但是每个递归调用都有前一层的期望,而且在这里无效。