(算法是你的谎言)二、非比较排序算法

在数据结构中,我们学习了几种排序,但是现在我想我们呢要更深入的学习排序,我们可以把排序的时间在升级一个层次
其中,一部分图片来源于哈佛算法公开课。


  • 排序算法上的这几种排序都有一个名字:比较排序
  • 时间复杂度都是大于Θ(NlgN)
  • 接下来我们希望排序的时间可以在线性时间层级内
  • 这些排序算法称之为:线性时间排序

1.决策树推导

(1)决策树的定义

  • 决策树是一种树形结构,其中每个内部节点表示一个属性上的判断,每个分支代表一个判断结果的输出,最后每个叶节点代表一种分类结果。
  • 在这里可以先用二叉树的理解代替决策树
  • 若将a1,a2,…,a_n做比较
  • 对于任意i,j其中i,j属于{1,2,···,n}
  • 若a_i<a_j,则左子树显示后续的比较
  • 若a_i>a_j,则右子树显示后续的比较

(2)决策树模型

  • 该模型是一个输入n个数的模型
  • 每次比较两个元素,并将算法是为拆分
  • 该模型包含所有可能的比较结果
  • 它并不是答案,而是一个过程,需要数据在该模型里面按照指令往下走
  • 算法的运行时间:正比于所走路径的长度
  • 算法最坏的运行时间:正比于树的高度

(3)决策树排序的下限

  • 其下限是:Ω(NlgN)
  • 证明
  • 其中,h是树的高度,n是需要排序数的数量

2.计数排序

(1)规定

  • 通常来说,其输入是一个数列,我们需要限定它的范围,总共有k个整数
  • 因为这是一种时间换空间的做法

(2)步骤

  • 先遍历一次,找出待排序队列的最大最小,根据其差值申请数组空间
  • 遍历元素,出现一次,记录其元素值对应的数组自加1
  • 在数组的第n个位置加和前面的n-1个数组的值
  • 按照数组最后一个位置分配空间,排序
    在这里插入图片描述
    (3)分析
  • 第一步时间复杂度:Θ(k)
  • 第二步时间复杂度:Θ(n)
  • 第三步时间复杂度:Θ(k)
  • 第四步时间复杂度:Θ(n)
  • 总共为Θ(n+k)
  • 这也就是基数排序不流行的主要因为,当k过大,会导致效率很低很低,其次是因为,他不能排序浮点数
  • 但这不影响它很稳定

其中排序的稳定性指:

  • 保证了相等元素的顺序,称之为相对顺序
  • 在图示中,我们有三个2,在排序完后,2的顺序维持之前的顺序

3.基数排序

(1)定义

  • 数字位置归纳

(2)步骤

  • 确定数组中最大元素的位数,确定执行轮次
  • 创建10个桶,从0至9
  • 按照元素个位、十位、百位···的顺序进行大小排序
  • 每一次排序如下图所示
    在这里插入图片描述
    (3)分析
  • 假设有n个数,每个数有b位
  • 在二进制中,其取值范围位0~2^b-1
  • 我们将b位分为r块,r时计算机一次性处理的位数
  • 如果计算机处理时是按照8个数字进行处理,那么对于32位操作系统来说,需要处理4轮
  • 基数排序是借用计数排序的思想的
  • 那么处理一次需要用Θ(n+2^r)
  • 总共要处理b/r次
  • 所以其时间是下图:
    在这里插入图片描述
    当然,这个算法也是稳定的。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值