【发布时间】:2017-08-12 23:04:38
【问题描述】:
我正在尝试实现快速排序算法,选择枢轴作为最右边的元素,如 Cormey 等人,算法简介中所述:
这是我的 Python 实现:
def partition(A, p, r):
pivot = A[r]
i = p - 1
for j in range(p, r-1):
if A[j] < pivot:
i += 1
A[i], A[j] = A[j], A[i]
A[i+1], A[r] = A[r], A[i+1]
return i+1
def quicksort(A, p, r):
if p < r:
q = partition(A, p, r)
quicksort(A, p, q-1)
quicksort(A, q+1, r)
但是,如果我尝试像这样测试它:
A = [2, 8, 7, 1, 3, 5, 6, 4]
quicksort(A, 0, len(A)-1)
print(A)
我得到一个未排序但仅分区一次的数组:
[2, 3, 1, 4, 5, 7, 8, 6]
(即4的所有左(右)元素都小于(大于)它)。似乎对quicksort 的递归调用没有像对partition 的调用一样在输入数组A 上正确运行。我该如何解决这个问题?
【问题讨论】:
标签: python algorithm quicksort