经典排序算法 - 桶排序Bucket sort
1,桶排序是稳定的
2,桶排序是常见排序里最快的一种,比快排还要快…大多数情况下
3,桶排序非常快,但是同时也非常耗空间,基本上是最耗空间的一种排序算法
无序数组有个要求,就是成员隶属于固定(有限的)的区间,如范围为[0-9](考试分数为1-100等)
例如待排数字[6 2 4 1 5 9]
准备10个空桶,最大数个空桶
[6 2 4 1 5 9] 待排数组
[0 0 0 0 0 0 0 0 0 0] 空桶
[0 1 2 3 4 5 6 7 8 9] 桶编号(实际不存在)
1,顺序从待排数组中取出数字,首先6被取出,然后把6入6号桶,这个过程类似这样:空桶[ 待排数组[ 0 ] ] = 待排数组[ 0 ]
[6 2 4 1 5 9] 待排数组
[0 0 0 0 0 0 6 0 0 0] 空桶
[0 1 2 3 4 5 6 7 8 9] 桶编号(实际不存在)
2,顺序从待排数组中取出下一个数字,此时2被取出,将其放入2号桶,是几就放几号桶
[6 2 4 1 5 9] 待排数组
[0 0 2 0 0 0 6 0 0 0] 空桶
[0 1 2 3 4 5 6 7 8 9] 桶编号(实际不存在)
3,4,5,6省略,过程一样,全部入桶后变成下边这样
[6 2 4 1 5 9] 待排数组
[0 1 2 0 4 5 6 0 0 9] 空桶
[0 1 2 3 4 5 6 7 8 9] 桶编号(实际不存在)
0表示空桶,跳过,顺序取出即可:1 2 4 5 6 9
C#代码演示
//待排数组 var unsorted = new int[] { 6, 2, 4, 1, 5, 9 }; //分配空桶 var bucket = new int[10]; //直接以每个待排数字为索引,将自己的值赋值给当前桶 for (int i = 0; i < unsorted.Length; i++) { bucket[unsorted[i]] = unsorted[i]; } //跳过值为0的空桶,顺序输出即可 for (int i = 0; i < bucket.Length; i++) { if (bucket[i] > 0) Console.WriteLine(bucket[i]); }
上一篇: MySQL 安装和基本命令
下一篇: 调试php的时分 最简单的echo不输出
推荐阅读
-
几种经典排序算法的JS实现方法
-
PHP排序算法之堆排序(Heap Sort)实例详解
-
PHP排序算法之归并排序(Merging Sort)实例详解
-
PHP排序算法之基数排序(Radix Sort)实例详解
-
图文详解Heap Sort堆排序算法及JavaScript的代码实现
-
JS中数据结构与算法---排序算法(Sort Algorithm)实例详解
-
PHP排序算法之简单选择排序(Simple Selection Sort)实例分析
-
PHP排序算法之希尔排序(Shell Sort)实例分析
-
PHP排序算法之冒泡排序(Bubble Sort)实现方法详解
-
PHP排序算法之直接插入排序(Straight Insertion Sort)实例分析