计数排序

不羁的心 提交于 2020-03-21 23:50:19

3 月,跳不动了?>>>

1、思想

    将数组元素作为数组下标,统计元素出现的个数。然后填充回原数组中。

2、时间复杂度

    最好O(n ),最坏O(n ),平均O(n )。

3、代码实现

public class CountSort {
    public static void countSort(int[] arr){
        if(arr == null || arr.length == 0) return;

        int n = arr.length;
        int max = arr[0];
        //寻找数组的最大值
        for(int i=1;i<n;i++){
            if(max < arr[i]){
                max = arr[i];
            }
        }

        int[] temp  = new int[max +1];
        for(int i=0;i<=max;i++) temp[i] = 0;

        //进行计数
        for(int i=0;i<n;i++){
            temp[arr[i]]++;
        }

        int cur = 0;
        //进行数组填充
        for(int i=0; i<=max; i++){
            for(int j= temp[i];j>0; j--){
                arr[cur++] = i;
            }
        }
    }

    public static void main(String[] args) {
        int[] arr = {50,10,90,30,70,40,80,60,20};
        countSort(arr);
        for (int array : arr) {
            System.out.print(array+" ");
        }
        System.out.println();
    }
}

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!