我的快速排序代码有问题。我对编写代码和python(python 3.6)还不太熟悉,如果有任何帮助,我将不胜感激。我已经在网上看到了几种快速排序的实现,但是我想找出我的代码到底有什么问题。我在下面粘贴代码:

def Partition(A):
    q = A[0]
    i = 1
    for j in range(1, len(A)):
        if A[j] < q:
            A[j], A[i] = A[i], A[j]
            i = i + 1
    A[0], A[i - 1] = A[i - 1], A[0]
    return i - 1

def QuickSort(A):
    if len(A) <= 1:
        return A
    else:
        q = Partition(A)
        QuickSort(A[ : q])
        QuickSort(A[q + 1 : ])
        return A

A = [7, 5, 4, 1, 3, 6, 2, 8]
Sorted = []
Sorted = QuickSort(A)
print(Sorted)

对于上面的输入,我得到的是输出[2,5,4,1,3,6,7,8],而不是按升序得到排序的列表。

最佳答案

它们试图对A的复制部分进行排序:

    QuickSort(A[ : q])
    QuickSort(A[q + 1 : ])

他们归还了一些东西,但是你忽略了他们归还的东西,所以它就丢失了。你应该把他们的结果写回A
    A[ : q] = QuickSort(A[ : q])
    A[q + 1 : ] = QuickSort(A[q + 1 : ])

在此更改之后,您的结果将是预期的[1, 2, 3, 4, 5, 6, 7, 8]

关于python - 快速排序代码中的问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47800782/

10-11 22:41