简介
十大经典排序算法里面冒泡、插入、选择排序时间为O($n^2$),归并、快排、堆排序这些排序时间为O(nlogn),此外还有三种更快的排序算法为桶排序,基数排序,计数排序。后面这三种排序时间为O(n),因此也被称之为线性排序算法。
桶排序一般是分这几步来操作:
-
先定义一组或者说几个有序的“桶”
-
使用映射函数将数组内的数据映射到各自对应的“桶”内
-
在每个“桶”内进行排序(归并、插入、快排等等都可以)
-
按顺序将每个”桶“内的数据依次取出,就可以输出一个有序的数组/数列
尝试实现
输入数组为:40,55,10,64,2,71,90,25,81,43
2.1 创建有序”桶“
”桶“一般我们采用二维的数组来实现。考虑到数组还要扩容,所以在Java端直接用ArrayList来做即可。
ArrayList<ArrayList<Integer>> buckets = new ArrayList<>();
另外一个就是桶的个数。很多例子中都是给个默认大小5,开始时先遍历一遍数组,找出最大值和最小值。然后根据(max-min)/5 + 1来计算出桶的个数。我们这里做简化处理,因为知道输入数组元素值得范围大致为0到99,可以按0-9,10-19...90-99这样划分为10组,所以取桶的个数为10。
2.2 映射函数
这一步的映射函数的作用是根据数组中的元素值,计算