桶排序之计数排序、基数排序

179 阅读2分钟

桶排序的思想

桶排序(Bucket sort)或所谓的箱排序,是一个排序算法,工作的原理是将数组分到有限数量的桶里。每个桶再个别排序(有可能再使用别的排序算法或是以递归方式继续使用桶排序进行排序),桶排序并不是比较排序.

桶排序以下列程序进行:

  • 设置一个定量的数组当作空桶子。
  • 寻访序列,并且把项目一个一个放到对应的桶子去。
  • 对每个不是空的桶子进行排序。
  • 从不是空的桶子里把项目再放回原来的序列中。

由此可见,桶排序对于数据的情况是有要求的。比方说

将 n 个大于 0 小于 50 的数字进行排序

该问题可以使用长度为 51 的数组;对这个 n 个数据进行统计,查看每个数出现的次数,最后根据每个数字出现的次数依次打印即可。

基数排序

基数排序是基于桶排序思想的一种排序。具体为将一个数分成个、十、百、千、万…… 根据其分类情况进行出桶入桶的操作,从而达到排序的结果。

小例子

[52,33,645,21,1,88][52,33,645,21,1,88] 进行排序

算法流程图

无标题-2021-10-13-0831.png

过程示意图

无标题-2021-10-13-0831.png

桶排序的时间复杂度与空间复杂度

桶排序是通过多次遍历数组来达到排序的目的,因此

时间复杂度O(n)O(n)

空间复杂的O(m)O(m) (m>=nm>=n),原因在于每次入桶都是需要把所有的数(n个)都放进桶里。

比较排序与桶排序的区别

比较排序是根据一套规则去判定两个数据的大小情况从而决定其先后顺序。而桶排序并不关心数据的相互之间的大小,他是根据数据状况,进行分类统计,最后达到排序的结果。