算法导论读书笔记(8)线性时间排序

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

第8章 线性时间排序

2. 计数排序

  • 基本思想:对每一个输入元素x,确定小于x的元素个数,利用这一信息,将x放到它在输出数组中的位置上。如,有17个元素小于x,则x就应该在第18个输出位置上。
  • 时间复杂度 Θ(n)
  • 假设输入数据都属于一个小区间内的整数
  • 重要性质: 稳定(具有相同值的元素在输出数组中的相对次序与输入数组中的相对次序相同)
    这里写图片描述
Counting-Sort(A, B, k)
    let C[0..k] be a new array
    for i = 0 to k
        C[i] = 0
    for j = 1 to A.length
        C[A[j]] = C[A[j]] + 1
    // C[i] now contains the number of elements equal to i.
    for i = 1 to k
        C[i] = C[i] + C[i-1]
    // C[i] now contains the number of elements less than or equal to i.
    for j = A.length downto 1
        B[C[A[j]]] = A[j]
        C[A[j]] = C[A[j]] - 1

3. 基数排序

  • 先按最低有效位进行排序
  • 具有线性的时间代价
  • 不是 原址排序
  • 快速排序可以比基数排序更有效地使用硬件的缓存
    这里写图片描述

4. 桶排序

  • 假设输入是由一个随机过程产生,该过程将元素均匀、独立地分布
  • 先对每个桶中的数进行排序,然后遍历每个桶,按照次序把只个桶中的元素列出
  • 时间复杂度 Θ(n)
Bucket-Sort(A)
    n = A.length
    let B[0..n-1] be a new array
    for i = 0 to n - 1
        make B[i] an empty list
    for i = 1 to n
        insert A[i] into list  B[⌊nA[i]⌋]
    for i = 0 to n - 1
        sort list B[i] with insertion sort
    concatenate the list B[0], B[1], ... B[n-1] together in order
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值