《数据结构》——基数排序,桶排序和计数排序

1 基数排序

给定一个序列,对其进行基数排序。基数指的是,数字的个位、十位等等。每一轮的遍历,只关注基数位置的数。
基本思想:不进行关键字的比较,而是依靠“分配”和“收集”。

算法描述:


准备:数字0-9“篮子”。

  • 开始:
    • 遍历基数(从个位开始):
      • 根据基数位置数的大小,把其放到相应的篮子;
      • 按照0-9的顺序对篮子里的数进行收集;
  • 结束

复杂度分析:

时间复杂度
空间复杂度

分析:时间复杂度:,M是基数的个数。空间负责度:,每个数篮子,链式存储。

2 桶排序

给定一个序列,对其进行桶排序。

算法描述:


准备:划分一定数量的桶。

  • 开始:
    • 遍历序列,把数放到相应的桶中;
    • 对非空的同进行排序(任意排序算法)。
    • 按照顺序读取桶中的元素。
  • 结束

复杂度分析

时间复杂度
空间复杂度

分析:N为排序长度,M为桶的个数。

  • 入桶阶段,需要对每个元素划分的桶进行选择,每个元素需要比较次;
  • 排序阶段,每个桶都要进行一次排序,假设桶内元素个数均匀分布。
  • 出桶阶段,每一个桶都要遍历一次。

3 计数排序

对一个给定数值上下限的序列N,对其进行计数排序。

算法描述:


准备:初始化一个全为0计数数组C。

  • 遍历序列N,对于每一个遍历到的数,数组C的相应位置的值+1;
  • 遍历数组C:
    • 读取数组值,如果该值大于0,循环:
      • 打印出该位置的编号,值-1;
  • 结束算法。

复杂度分析

时间复杂度
空间复杂度

分析:时间复杂度:遍历排序数组N,遍历计数数组(长度设为M),并循环N。空间复杂度:计数数组M。
可以看出,这个算法的时间复杂度是很低的,可能超过的极限。
计数排序Leetcode编程练习

你可能感兴趣的:(《数据结构》——基数排序,桶排序和计数排序)