桶式排序

来源:互联网 发布:常见的hash算法有哪些 编辑:程序博客网 时间:2024/06/05 11:46

简单桶式排序

有限个数字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个桶,这样效率是非常低的

0 0
原创粉丝点击