快速排序

算法的关键部分是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-10个元素
此时算法的运行时间递归式可以表示为
        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)


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值