【发布时间】:2016-03-25 22:51:11
【问题描述】:
我正在处理一项算法作业,该作业要求我用一组相等的元素(1(a)、1(b)、1(c) 等)和枢轴来展示快速排序算法的进程是数组中的最后一个元素。算法的递归部分让我感到困惑。到目前为止,我有进展:
1(a) 1(b) 1(c) 1(d) [1(e)]
1(a) | 1(b) 1(c) 1(d) 1(e)
1(a) 1(b) | 1(c) 1(d) 1(e)
1(a) 1(b) 1(c) | 1(d) 1(e)
1(a) 1(b) 1(c) 1(d) | 1(e)
在此之后,我认为支点将变为 1(d),并且进展将与上述相同,只是少了一次交换。我对左右递归调用的工作方式感到困惑。数组“右侧”的元素会与它们自己交换吗?这个算法会在什么时候停止?
这是伪代码:
QS(A, p, r):
if p < r
q = PARTITION(A, p, r)
QS(A, p, q - 1)
QS(A, q + 1, r)
PARTITION(A, p, r):
x = A[r]
i = p - 1
for j = p to r - 1
if A[j] <= x
i = i + 1
exchange A[i] with A[j]
exchange A[i + 1] with A[r]
return i + 1
p 是第一个元素数组,r 是最后一个元素。
感谢您的帮助。
【问题讨论】:
-
您的问题不清楚。你没有显示任何伪代码。
-
我的错误。刚刚添加!
-
这里有一些可以帮助的解释:quick sort with duplicate elements.
标签: arrays algorithm quicksort