计数排序

/**
     * 计数排序
     * 对于一个输入数组中的一个元素x,
     * 只要我们知道了这个数组中比x小的元素的个数,
     * 那么我们就可以直接把x放到(x+1)的位置上。这就是计数排序的基本思想
     */
    @Test
    public void countSort(){
        int[] array = {1,4,5,6,7,9,5,6,3,2};
        countSort(array,10);
        System.out.println(Arrays.toString(array));

    }

    public void countSort(int[] array,int k){
        //初始化count数组
        int[] count = new int[k];
        for (int item:array){
            count[item]++;
        }

        for (int i=1;i<k;i++){
            count[i]=count[i]+count[i-1];
        }

        int[] b = new int[array.length];
        for (int j=array.length-1;j>=0;j--){
            b[count[array[j]]-1] = array[j];
            count[array[j]]--;
        }
        System.arraycopy(b,0,array,0,array.length);
    }
View Code
原文地址:https://www.cnblogs.com/nihaofenghao/p/9093473.html