递归快速排序仅返回第一次递归调用的结果

时间:2015-06-11 21:34:42

标签: python quicksort

我试图在Python中实现基于伪代码的快速排序,但我没有在列表中排序。它执行递归并始终返回第一个递归调用的结果(未排序)。谁能解释我做错了什么?

def quick_sort(S):
    n = len(S)
    if n < 2:
        return
    p = S[0]
    L = []
    E = []
    G = []
    for i in range(0,len(S)):
        if S[i] < p:
            L.append(S[i])
        elif p < S[i]:
            G.append(S[i])
        else:
            E.append(S[i])
    quick_sort(L)
    quick_sort(G)
    S=L+E+G

1 个答案:

答案 0 :(得分:2)

您不会返回任何内容,只会创建新列表,但不能使用它们。 返回新列表:

def quick_sort(S):
    n = len(S)
    if n < 2:
        return S
    p = S[0]
    L = []
    E = []
    G = []
    for v in S:
        if v < p:
            L.append(v)
        elif p < v:
            G.append(v)
        else:
            E.append(v)
    return quick_sort(L) + E + quick_sort(G)

print quick_sort([6,4,2,3])