好程序員Java學習路線分享5分鐘瞭解計數排序

好程序員Java學習路線分享5分鐘瞭解計數排序,前言:計數排序是一種非比較性質的排序算法,計數排序藉助輔助空間記錄每個元素出現的次數,根據次數確定每一個元素最終的位置。
計數排序思想介紹
1根據待排序數組,獲取最大值和最小值,得到所有元素的範圍 [m,n]
2新建一個長度爲n-m+1的臨時數組
3遍歷待排序數組,元素的值-m作爲臨時數組下標,該下標位置記錄元素出現次數
4遍歷結束,臨時數組就存儲了每個元素出現的次數
5根據該臨時數組,最終得到排序後元素

算法說明:
待排序數據:12,4,6,7,4,6
數據範圍爲[4,12],臨時數組長度爲12-4+1=9
好程序員Java學習路線分享5分鐘瞭解計數排序

最終得到排序後序列:4,4,6,6,7,12
計數排序的代碼實現
1.public static void sortCount(int[] arr) {  
2.        int max = 0;  
3.        int min = 0;  
4.        // 獲取數組的最大值和最小值  
5.        for(int i = 0; i < arr.length; i++){  
6.            max = Math.max(max, arr[i]);  
7.            min = Math.min(min, arr[i]);  
8.        }  
9.        int len = arr.length;  
10.        // 創建臨時數組  
11.        int[] temp = new int[max - min + 1];  
12.        // 計數  
13.        for(int i = 0; i < len; i++) {  
14.            temp[arr[i] - min] += 1;  
15.        }  
16.        // 將臨時數組中數據依次放回原數組  
17.        for(int i = 0, index = 0; i < temp.length; i++) {  
18.            int item = temp[i];  
19.            while(item-- != 0) {  
20.                arr[index++] = i + min;  
21.            }  
22.        }  
23.    }  

總結
計數排序需要佔用額外的存儲空間,它比較適用於數據比較集中的情況。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章