简单桶式排序
有限个数字m,每个数字的大小都在1与n之间,则我们可以假设有n个桶,遍历m个数字,将其存入对应的桶中(如数字的值为3,就存入3号桶,桶的值对应存入数字的个数
| 桶号 | 1 | 2 | 3 | 4 | 5 |
|---|---|---|---|---|---|
| 计数 | 1 | 1 | 2 | 0 | 1 |
我们按照桶的序号将数字倒出来,如下:
| 桶的倒出顺序 | 数字队列 |
|---|---|
| 5号桶倒出1个5 | 5 |
| 4号桶倒出0个4 | 5 |
| 3号桶倒出2个3 | 5,3,3 |
| 2号桶倒出1个2 | 5,3,3,2 |
| 1号桶倒出1个1 | 5,3,3,2,1 |
/ * 桶式排序 * @author yangpeng * */ public class BucketSortDemo {
public static void main(String[] args) { int[] a = { 9, 4, 7, 2, 5, 8, 3, 2, 10, 1 }; System.out.println("初始序列:" + Arrays.toString(a)); bucketSort(a,10); } / * * @param a 需要排序的数组 * @param max 数组中的最大值 */ public static void bucketSort(int[] a,int max){ int[] count=new int[max+1];//创建一个长度为max的数组 // 遍历数组a for (int i = 0; i < a.length; i++) { // 如果数组a的值 作为的count的 下标,每次出现一次 count数组的值+1 count[a[i]]++; } // 将桶的中数字倒出 System.out.print("排序好的序列:"); for (int i = 0; i < count.length; i++) { while(count[i]>0){ System.out.print(i +" "); count[i]--; } } } }
弊端
如果我们的数字波动范围非常大,比如1到10000,那么我们需要一个10000元素数组的空间开销,而且在倒出数字的时候需要遍历10000个桶,这样效率是非常低的
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/220400.html原文链接:https://javaforall.net
