算法的关键部分是PARTITION过程,实现了对数组A[p..r]的原址排序
PARTITION(A,p,r)
x=A(r)
i=p-1
for j=p to r-1
if A[j]<x
i=i+1
echange A[i] with A[j]
echange A[i+1] with A[r]
return i+1
性能分析
最坏情况是划分的两个子数组分别包括n-1和0个元素
此时算法的运行时间递归式可以表示为
T(n)=T(n-1)+T(0)+0(n)
结果为 0(n^2)
最坏情况下,运行时间并不比插入排序好,而且当输入的数组已经完全有序时,时间的复杂度仍为0(n^2)
平衡情况的划分更接近于其最好情况:比如产生9:1的划分,此时算法的运行时间递归式可以表示为
T(n)=T(1n/10)+T(9n/10)+cn
递归在深度为 0(lgn)处终止
快速排序的随机化
RANDOMIZED-PARTITION (A,p,r)
i=RANDOM(p,r)
exchange A(i) with A(r)
rerurn PARTITION(A,p,r)
新的快速排序调用RANDOMIZED-PARTITION
RANDOMIZED-PARTITION(A,p,r)
if p<r
q=RANDOMIZED-PARTITION(A,p,r)
RANDOMIZED-PARTITION(A,p,q-1)
RANDOMIZED-PARTITION(A,q+1,r)
在**输入元素互异**的情况下,快速排序算法的期望运行时间为O(nlgn)
快速排序
最新推荐文章于 2024-08-14 12:02:23 发布