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

好程式設計師IT發表於2019-08-01

好程式設計師 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

最終得到排序後序列: 4 4 6 6 7 12

計數排序的程式碼實現

1.  public   static   void  sortCount( int [] arr) {  

2.           int  max =  ;  

3.           int  min =  ;  

4.           // 獲取陣列的最大值和最小值   

5.           for ( int  i =  ; 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 =  ; i < len; i++) {  

14.              temp[arr[i] - min] +=  1 ;  

15.          }  

16.           // 將臨時陣列中資料依次放回原陣列   

17.           for ( int  i =  , index =  ; i < temp.length; i++) {  

18.               int  item = temp[i];  

19.               while (item-- !=  ) {  

20.                  arr[index++] = i + min;  

21.              }  

22.          }  

23.      }  

 

總結

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


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69913892/viewspace-2652472/,如需轉載,請註明出處,否則將追究法律責任。

相關文章