码迷,mamicode.com
首页 > 编程语言 > 详细

基数排序总结

时间:2018-10-11 23:50:53      阅读:42      评论:0      收藏:0      [点我收藏+]

标签:千万   数列   math   比较   网上   应该   note   关键字   理解   

基数排序——线性排序方法?

标签:知识点总结
阅读体验:https://zybuluo.com/Junlier/note/1307580

吐槽

网上看了几篇就能弄懂了,这个东西其实挺简单的
比起那些什么\(FFT,NTT,后缀XXX......\)来说还是很简单的,并且还比较有用

具体实现

基数排序,顾名思义,是基于数列中每个数的每一位而完成的排序
就是分别对每一位(个十百千万)进行排序,最后得到一个真正有序的序列

\(Method\) \(1\)

首先,对当前序列以个位上的值为关键字进行排序
然后,对排序后的序列以十位上的值为关键字进行排序
\(......\)以此类推\(......\)直到最后一位






为什么这样会是对的
其实心中应该是有个大概的(这个还是很显然
想一想,按照上述方法排序后,是不是等同下面这种排序方法

以最高位为第一关键字,最高位相等时,以次高位为第二关键字......以个位为第\(K\)关键字(\(K\)当然是序列中最大数的位数)进行排序

可以理解上面这种排序方法一定是正确的吧(你比较两个数大小不就这么比的吗)
而基数排序的实现其实本质上就是这样的

\(Method\) \(2\)

其实我用第二种实现方法直接证明正确性更直观(简直和那段理想排序方法一模一样)
就是对最高位进行排序
如果序列中有多个数最高位上的值相同,那么递归做那一个最高位,回到上一行
这个不就很显然了吗\(......\)

复杂度?

标题不是说了线性吗
不信\(?......\)那,常数\(×\)线性
哦,不要我讲了,那我走了

复杂度还用我讲吗?不就是\(O(K×n)\)\(K\)是最高位(最大数的位数)
你以为别人出题\(K\)能出多大,你\(long\) \(long\)也就装\(18\)位(虽然这就基本不如快排\(sort\)了)
你就当他是个常数吧,行行行,\(O(n)\)






又是一篇好短的总结。。。
他真的就只有这么多,我想啰嗦也就只能啰嗦这两行。。。

基数排序总结

标签:千万   数列   math   比较   网上   应该   note   关键字   理解   

原文地址:https://www.cnblogs.com/cjoierljl/p/9775599.html

(0)
(0)
   
举报
评论 一句话评论(0
0条  
登录后才能评论!
© 2014 mamicode.com 版权所有 京ICP备13008772号-2
迷上了代码!