桶排序

 /**
     * 桶排序
     */
    @Test
    public void bucketSort(){
        int[] array = {5,6,7,8,9,1,2,3,5,6,7,8,9};
        buckerSort(array);
        System.out.println(Arrays.toString(array));
    }

    public void buckerSort(int[] array){
        //构造桶
        int n = array.length;
        List<ArrayList<Integer>> Blist = new ArrayList<ArrayList<Integer>>(n);
        for (int i=0;i<n;i++) {
            Blist.add(new ArrayList<Integer>(5));
        }
        int max = Integer.MIN_VALUE;
        int min = Integer.MAX_VALUE;

        for (int item:array){
            max=Math.max(max,item);
            min=Math.min(min,item);
        }

        for (int i:array
             ) {
            int length = array.length;
            //下标计算
            int index=(int)((i-min)/(max-min+1.0)*length);
            Blist.get(index).add(i);
        }

        //桶内排序
        for(int i=0 ;i<Blist.size();i++){
            Collections.sort(Blist.get(i));
        }

        int j=0;
        //合并元素
        for (ArrayList<Integer> items:Blist
             ) {
            for (int item:items){
                array[j++]=item;
            }

        }
    }
View Code
原文地址:https://www.cnblogs.com/nihaofenghao/p/9095516.html