13 | 线性排序:如何根据年龄给100万用户数据排序?

132 阅读1分钟

基本概念

  • 线性排序:时间复杂度为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)
  • 桶排序:将数据划分到不同的桶中实现
  • 计数排序:将数据划分到不同的桶中实现(一个桶只存一种数据)
  • 基数排序:可以划分高低位,位于位间有递进关系