Java排序算法实现----计数排序

public class CountingSortDemo {
    public static void csa(int[] array){
        //长度为0直接退出
        if (array.length == 0)return;
        //找到最大值,最小值确定数组范围
        int min = array[0];
        int max = array[0];
        for (int i=0;i<array.length;i++){
            if (array[i]>max){
                max = array[i];
            }
            if (array[i]<min){
                min = array[i];
            }
        }
        //新建一个大小为max-min的数组(索引已经有序,记录出现次数即可)
        int[] countArray = new int[max-min+1];
        for (int i=0;i<array.length;i++){
            countArray[array[i]-min]++;
        }
        //升序读取出现过的索引存到原数组
        int index = 0;
        int i = 0;
        while (i < array.length){
            if (countArray[index] != 0){
                countArray[index]--;
                array[i] = index + min;
                i++;
            }else {
                index++;
            }
        }
        return;
    }

    public static void main(String[] args) {
        int[] array = {3,4,6,1,7,5,2,34,98};
        csa(array);
        for (int i=0;i<array.length;i++){
            System.out.println(array[i]);
        }
    }
}

实现流程
1.找到待排序数组的最大值(max)、最小值(min)
2.新建max-min大小的计数数组
3.将待排序数组中元素出现的次数保存计数数组相应的位置(array[i]-min)
4.遍历计数数组,将(index+min)保存到待排序数组,直到计数数组元素均为0

时间复杂度:O(n+k)
空间复杂度:O(k)

你可能感兴趣的:(Java排序算法实现,算法,java,排序算法)