計數排序

一、思想java

    將數組元素做爲數組下標,統計元素出現的個數。而後填充回原數組中。數組

二、時間複雜度code

    最好O(n ),最壞O(n ),平均O(n )。class

三、代碼實現統計

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();
    }
}
相關文章
相關標籤/搜索