快速排序代码中的问题
Problems in Quick Sort Code
我的快速排序代码有问题。我是编码和 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
的 copied 部分进行排序:
QuickSort(A[ : q])
QuickSort(A[q + 1 : ])
他们return的东西,你却忽略了他们return的东西,所以就丢了。你应该把他们的结果写回 A
:
A[ : q] = QuickSort(A[ : q])
A[q + 1 : ] = QuickSort(A[q + 1 : ])
此更改后,您的结果是预期的 [1, 2, 3, 4, 5, 6, 7, 8]
。
我的快速排序代码有问题。我是编码和 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
的 copied 部分进行排序:
QuickSort(A[ : q])
QuickSort(A[q + 1 : ])
他们return的东西,你却忽略了他们return的东西,所以就丢了。你应该把他们的结果写回 A
:
A[ : q] = QuickSort(A[ : q])
A[q + 1 : ] = QuickSort(A[q + 1 : ])
此更改后,您的结果是预期的 [1, 2, 3, 4, 5, 6, 7, 8]
。