算法导论读书笔记(7)快速排序

第二部分 排序和顺序统计量

第7章 快速排序

  • 快速排序最坏情况的时间复杂度为Θ(n²)
  • 但是快速排序是实际排序应用中最好的选择,因为它的平均性能非常好:它的期望时间复杂度是Θ(nlgn),而且Θ(nlgn)中隐含的常数因子非常小
  • 原址排序

1. 快速排序的描述

与归并排序一样,也使用了分治思想这里写图片描述

Quick-sort(A, p, r)
    if p < r
        q = Partition(A, p, r)
        Quick-sort(A, p, q-1)
        Quick-sort(A, q+1, r)
算法的关键部分是Partition过程,它实现了对子数组A[p..r]的原址重排。
Partition总是选择一个x=A[r]作为主元,并围绕它来划分子数组A[p..r]。随着程序的执行,数组被划分成4个区域。

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] width A[j]
    exchange A[i+1] with A[r]
    return i + 1

2. 快速排序的性能

快速排序的运行时间依赖于划分是否平衡,而平衡与否又依赖于用于划分的元素。划分平衡与归并排序性能一样,否则,其性能接近于插入排序

  • 最坏情况划分,时间复杂度为Θ(n²)
  • 最好情况划分,时间复杂度为Θ(nlgn)

快速排序的平均运行时间更接近于其最好情况,而非最坏情况。

3. 快速排序的随机化版本

随机从子数组A[p..r]中随机选择一个元素作为主元。为达到这一目的,首先将A[r]与从A[p..r]中随机选出的一个元素交换。

Randomized-Partition(A, p, r)
    i = Random(p, r)
    exchange A[r] with A[i]
    return Partition(A, p, r)
Randomized-Quick-sort(A, p, r)
    if p < r
        q = Randomized-Partition(A, p, r)
        Randomized-Quick-sort(A, p, q-1)
        Randomized-Quick-sort(A, q+1, r)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值