计数排序

计数排序

  思路: 

    负数暂不考虑,后续维护

    1- 找出数组中的最大值,新建一个  最大值+1  长度大小的数组

    2- 数组中的数据 作为计数数组的下标,值存出现的次数

         3- 循环计数数组,value > 0 将下标放入结果数组

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

  空间复杂度:O(k)

 


 (一)代码

public class CountingSort {

    public static void main(String[] args) {

        int arr[] = new int[]{3,3,4,7,13,435,54,2,6666,234};
        countingSort(arr);
        System.out.print(Arrays.toString(arr));

    }

    private static void countingSort(int[] arr) {

        //获取数组最大值
        int maxval = getMaxValue(arr);

        //新建计数 数组  大小为max + 1 考虑0
        int[] count = new int[maxval+1];
        for(int value : arr){
            count[value]++;
        }

        int countingIndex = 0;
        for(int i = 0 ; i < count.length ; i++) {
            while (count[i] > 0) {
                arr[countingIndex++] = i;
                count[i]--;
            }
        }
    }

    private static int getMaxValue(int[] arr) {

        int max = 0;
        for(int ar : arr){
            if(ar > max){
                max = ar;
            }
        }

        return max;
    }
}

 


 

 

 

 


 

 

 

          迎着光的方向

 

 

 

posted @ 2021-07-01 15:17  朝才  阅读(57)  评论(1编辑  收藏  举报