基本概念
-
线性排序:时间复杂度为O(n) 的排序算法
- 桶排序
- 计数排序
- 基数排序\
-
线性排序的核心思想:不涉及原语间比较操作
-
需要掌握:排序算法的适用场景
桶排序
-
核心思想:将排序的数据分到几个有序的桶里,每个桶里进行单独排序
-
时间复杂度分析
- 假设排序数据n个,均匀分到m个桶内,每个桶有k=n/m 个
- 在每个桶内进行快排O(k * logk),整个桶排序O(n*log(n/m))
- 当桶个数据接近n时,近似O(n)
-
桶排序可以取代快排等算法吗?
- 可以划分m个桶
- 数据在各个桶间分布均匀
-
适用场景:外部排序,数据存储在外部磁盘,数据量比较大(保证每个桶内所有元素都可以读进内存)
记数排序
-
核心思想:桶排序的特殊情况,将最大值k划分成k个桶(每个桶内元素大小相同)
- 高考全省排名
-
适用场景:数据范围不大的场景(岁数,分数等等)
基数排序
-
核心思想:对每一位进行桶排序或计数排序(保证最后一位有序后,在继续排序)
-
时间复杂度:O(kn),k较小时时间复杂度近似O(kn)
-
要求
- 需要可以独立的位进行比较
- 位之前有递进关系
总结
- 时间复杂度O(n)
- 桶排序:将数据划分到不同的桶中实现
- 计数排序:将数据划分到不同的桶中实现(一个桶只存一种数据)
- 基数排序:可以划分高低位,位于位间有递进关系