排序--桶排序计数排序基数排序
Posted Warrior
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了排序--桶排序计数排序基数排序相关的知识,希望对你有一定的参考价值。
今天重点是掌握这几种排序算法的适用场景。
01
—
桶排序
定义
桶排序是先把数据放到不同的有顺序的桶中
在桶内部先排好序
然后把每个数据按照顺序取出
整体就是有序的了
复杂度分析
时间复杂度是O(n)
最差情况
把数据都分到了同一个桶内
时间复杂度变成O(nlogn)
适用场景
比较适合用在外部排序中
例如:对10G订单进行排序,内存只有几百兆。
步骤1:先扫描订单,找到最大最小金额,确定范围。
假设最小金额1元,最小金额10万元
步骤2:按照金额区间划分1000个桶
把10G订单按照金额分别放到不同桶内
再进行排序。
步骤3:假设某个区间金额过多,可以针对这个区间继续进行分桶
直到将所有文件都能读近内存为止。
02
—
计数排序
定义
不太好描述,直接看例子吧。
步骤2:对C[6]数组顺序求和
如下图
这样得出例如:小于等于3分的考生有7名
步骤3:
从后往前遍历数组A[8](之所以从后往前,是因为这样是稳定排序)
第一个元素是3,
我们将3放入新数组R[8]的索引6位置
同时将C[6]上索引3的元素减一
如下图:
这样就将考生按照分数大小排序。
如果想根据分数得到考生排名
可以直接到C[6]中将分数作为索引
得到对应的元素即是排名
03
—
基数排序
定义:
同样不好描述直接看例子
对10万个手机号进行排序做到O(n)
步骤1:按照最后一排先排序(需要时稳定排序算法)
步骤2:排好顺序再排倒数第二排
经过11次排序就得到有序了。
如图:
我们可以用桶排序算法分别对每一位数字进行排序
因为桶排序算法的复杂度是O(n)
排序11次,11为常量
因此排序复杂度是O(n)
基于此种排序算法还可以给单词排序
长度不够的末尾补零即可。
基数排序适用场景
需要满足如下三个条件
1、待排数据可以分割出独立的位进行比较
2、位与位之间有递进关系
3、位的范围不能太大
04
—
总结
桶排序、计数排序、基数排序时间复杂度都是O(n)
桶排序和计数排序都是针对数据范围不大的情况
基数排序前提是可以划分出位
并且位与位之间有递进关系
并且位的范围不大的情况
下一节讲述排序算法的工程实现
对于工程角度来讲排序往往是多个算法
利用各自算法优势组合实现。
再见!
以上是关于排序--桶排序计数排序基数排序的主要内容,如果未能解决你的问题,请参考以下文章