线性时间排序

8.1排序算法的时间下限
比较排序可以抽象为决策树,一颗决策树是一颗满二叉树,表示某排序算法作用于给定输入所做的所有比较,而控制结构、数据移动等都被忽略了。
要使排序算法能正确的工作,其必要条件是,n个元素的n!种排列中的每一种都作为决策树的一个叶子而出现。
最坏情况下界
从根到任意一个可达的叶节点之间最长路径长度,表示对应的排序算法最坏情况下的比较次数。
定理:
任意一个比较排序算法在最坏情况下,都需要做W(nlgn)次比较
推论:
堆排序和合并排序都是渐进最优的比较排序算法

8.2 计数排序
计数排序假设n个输入元素中的每一个都是介于0到k之间的整数,此处k为某个整数。当k=O(n)时,计数排序的运行时间为O(n).
计数排序的基本思想:
对每一个输入的元素x,确定出小于x的元素个数。有了这一信息就可以把x直接放在最终的数组的位置上。
数排序代码中需要三个数组,第一个是输入数组,length=n;另外需要排序结果数组length=n,临时存储区,length=k;

技术排序一个重要的性质是它是稳定的,具有相同值的元素在输出数组中的相对次序与它们在输入数组中的次序相同。

8.3 基数排序
基数排序是一种用在老式穿卡机上的算法。
基数排序是首先按最低有效位数字进行排序,以解决卡片排序问题。
对于这个算法很重的一点就是按位排序要稳定,按卡片排序器所做的排序是稳定的。
引理:
给定n个d位数,每一个数位可以取k种可能的值。如果所用的稳定排序需要O(n+k)的时间,基数排序算法能以O(d(n+k))的时间正确地对这些数进行排序。
引理:
给定n个b位数和任何整数r<=b,如果采用稳定排序需要O(n+k)时间,那么基数排序算法能够在O((b/r)(n+2^r))时间内正确的对这些数进行排序。

8.4桶排序
当桶排序的输入符合均匀分布时,即可以以线性期望时间运行。
基数排序假设输入是由一个范围内的整数构成,而桶排序假设输入是由一个随机过程产生,该过程将元素均匀而独立地分布在区间[0,1)上。

桶排序的思想:
把区间[0,1)划分成n个相同大小的子区间,或称为桶。然后将n个输入数,分布到各个桶中。因为输入数独立均匀分布在[0,1)上,所以一般不会有多数落在一个桶中的情况。为得到结果,先对各个桶中的数据进行排序,然后按照次序把各个桶中的元素列出来即可。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值