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

好程序員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.     }  

總結

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

相關文章
相關標籤/搜索