【排序算法】——桶排序

曾经终败给现在 2022-07-20 12:13 306阅读 0赞

前提

  1. 算法大讲堂开课了,连续几天的算法讲解,真是让小编收获颇多。之前小编尝试总结过冒泡排序,可是随着最近知识的增加,发现好像还有的理解偏颇之处,后续会继续完善。本次小编要讲解的是桶排序,个人认为桶排序是非常好玩的一个排序算法。最神奇的地方,不用交换数据,就能把数据的顺序调整好。

何为桶算法?

  1. 首先实例化出n个桶,把待排序的数组里面的数在与之相等的桶的索引值,对应的桶里面的数据加1。工作的原理是将数组分到有限数量的桶子里。每个桶子再个别排序(有可能再使用别的排序算法或是以递归方式继续使用桶排序进行排序)。桶排序是鸽巢排序的一种归纳结果。当要被排序的数组内的数值是均匀分配的时候,桶排序使用线性时间(Θ(n))。但桶排序并不是比较排序,他不受到 O(n log n) 下限的影响。桶排序的时间复杂度是O(M+N)。

如何学习桶算法?

大概执行内容

1、产生随机数

2、创建对应的桶

3、桶和数据对应起来

4、相对应的桶数值加一

5、打印桶的索引值

代码展示

  1. <span style="font-family:KaiTi_GB2312;font-size:24px;"> static void Main(string[] args)
  2. {
  3. SortHelper sorted = new SortHelper();
  4. //待排序的数组
  5. int[] arry = { 99, 65, 47, 47, 50, 88, 33, 66, 67, 31, 18 };
  6. //调用桶排序的方法
  7. sorted.BucketSort(arry, 99);
  8. }
  9. #region BucketSort封装桶排序的算法-贾文静-2016年7月20日21:27:30
  10. public class SortHelper
  11. {
  12. public void BucketSort(int[] unsorted, int maxNumber)
  13. {
  14. //分配桶的个数,此排序范围和maxNumber的大小有关
  15. int[] sorted = new int[maxNumber + 1];
  16. //将待排序数组里面的数放到与sorted数组相对于的桶里面
  17. //待排序的数等于桶排序的索引值,则对应的桶 sorted[unsorted[i]]数值加1
  18. for (int i = 0; i < unsorted.Length; i++)
  19. {
  20. sorted[unsorted[i]] = sorted[unsorted[i]] + 1;
  21. }
  22. //打印出数值不为0的桶的索引值
  23. for (int i = 0; i < sorted.Length; i++)
  24. {
  25. if (sorted[i] > 0)
  26. {
  27. //判断桶里面有多少个数,然后全部打印出来
  28. for (int j = 0; j < sorted[i];j++ )
  29. {
  30. Console.WriteLine(i);
  31. }
  32. }
  33. }
  34. Console.ReadLine();
  35. }
  36. }
  37. #endregion</span>

展示结果

  1. ![SouthEast][]

代码程序之灵魂

  1. sorted\[unsorted\[i\]\] = sorted\[unsorted\[i\]\] + 1;

桶排序的优缺点

桶排序的好处

1、桶排序是稳定的
2、大多数情况下桶排序是常见排序里最快的一种,比快排还要快

桶排序的缺点

1、非常浪费存储空间

2、排序的数据非常限定,只能在整型范围之内

3、只能是整数。

总结

  1. 桶排序是非常简单的一种排序方式,也是非常基础的一种。个人认为其中最厉害的就是不交换位置就能排好顺序。索引值和待测数值联合起来,真心觉得想法还是非常重要!这才是真正的创造。当然桶排序有很大的不足之处,排序的范围很受限制,所以更要此基础上学习新的算法,以此来提高自己!而且发现虽然理解原理,但是真正写出运行的程序还是对自己有难度的,积累吧,提高代码量!

发表评论

表情:
评论列表 (有 0 条评论,306人围观)

还没有评论,来说两句吧...

相关阅读

    相关 排序算法 - 排序

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

    相关 算法排序

    计数排序、桶排序、基数排序均为O(n)算法 桶排序可以看成是计数排序的升级版,它将要排的数据分到多个有序的桶里,每个桶里的数据再单独排序,再把每个桶的数据依次取出,即可

    相关 排序算法-排序

    先创建若干个桶,每个桶存放不同范围的数据 桶和桶之间的跨度=(数据最大值-数据最小值)/ (桶的数量 - 1) 假设有一个数组:1.2,0.5,4.5,2.6,2.7

    相关 [算法]排序

    介绍 桶排序是分治算法的应用. 桶排序实际上就是把要排序的容器中的数据,分别按照大小跨度 分散在若干个桶中,如果桶中有一个以上的数据,则单独的桶进行 排序,最