“学习笔记”之《算法导论》----第二部分----排序和顺序统计量----第八章----线性时间排序

本人大四即将结束,于2018年12月18日购《算法导论》这本书,慢慢看,第一阶段先主要理解各个章节说的算法都是什么意思,书上的课后习题先不做,用得上什么算法我再详细学习。这是官方课后答案的链接

放在开头:没有好的算法,坏的算法之说,重点是针对不同的情况,针对不同的数据,针对不同的需求,去选择算法,改良算法。我的数学功底不强,太难的公式我看不懂,太高深的思想我理解不了,我主要以应用为主,不以解释数学公式为主。

 之前介绍的都是比较排序,就是看两个元素谁比谁大。现在介绍几种新的算法,计数排序,基数排序,桶排序。

计数排序

真的完全没有比较的痕迹。完全就是计数。

第一步:统计每个数字都出现了多少次,没有出现的数字记为0次。

第二步:得到每个数出现过几次这么一个数组(数组下标是数字,数组下标对应的元素是出现的次数),然后从低到高累加,得到一个新的数组,这个数组记载了整个要排序的数据中,比当前数据小于或者等于的数有多少个。

第三步:生成一个新的数组(跟原始数组一样大),我们现在开始将原数组中的数据一个一个的放入新的数组中,放入的位置就是计数数组下标中的数。并且放入一个数后,这个计数数组的下标就减1,直到把所有的原数组数据过一遍。

总结一下:计数排序的优点就是时间复杂度小,缺点就是空间复杂度大,前前后后,新建了两个数组。

基数排序

这个理解起来简单,就是日期排序的思想,先年,年份一样,再月份,然后具体是哪个日期。  

举例:对于若干个n位数,先只看个位,个位从小到大排,然后看十位,然后百位,以此类推。

桶排序

这个也很简单。上面的基数排序是按照哪一位分区(个位十位百位。。。),这个就是按数的区间划分。

例如有一堆0~1的小数。就分十份区间,0~0.1区间,0.1~0.2区间。。。。 

先把数据放入对应的区间里面,然后再给每个区间再排序。

总结一下,这章的几个算法就是:用高空间复杂度换取低时间复杂度

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mr.Naruto

你的鼓励是我的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值