好程序員Java學習路線分享5分鐘瞭解計數排序,前言:計數排序是一種非比較性質的排序算法,計數排序藉助輔助空間記錄每一個元素出現的次數,根據次數肯定每個元素最終的位置。程序員
1根據待排序數組,獲取最大值和最小值,獲得全部元素的範圍 [m,n]算法
2新建一個長度爲n-m+1的臨時數組數組
3遍歷待排序數組,元素的值-m做爲臨時數組下標,該下標位置記錄元素出現次數學習
4遍歷結束,臨時數組就存儲了每一個元素出現的次數spa
5根據該臨時數組,最終獲得排序後元素blog
算法說明:排序
待排序數據:12,4,6,7,4,6it
數據範圍爲[4,12],臨時數組長度爲12-4+1=9遍歷
最終獲得排序後序列: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. }
計數排序須要佔用額外的存儲空間,它比較適用於數據比較集中的狀況。