Java實現基數排序


  • 基本介紹

基數排序屬於“分配式排序”,它通過元素的各個位的值,將元素放置對應的“桶”中

基數排序屬於穩定性排序,效率高,但是過多的元素會出現虛擬機運行內存的不足(千萬個元素)

  • 基本思想

 

把元素統一為同樣長度的數組長度   元素較短的數前面補0,比如(1 15 336   看成  001 015 336)

然后從最低位開始,以此進行排序。

 

 

 

  •  代碼實現

public static void radix_sortin(int[] str) {
  
  // 桶  10個桶  每個桶的最大容量默認為數組長度
  int[][] bucket = new int[10][str.length];
  // 每個桶的當前容量
  int[] capacity = new int[10];
       
  //元素求出最大數                                                                                                                                                                                                                                                                                                                                                                                                                                          
  int max = str[0];
  for (int r = 0; r < str.length; r++) {
   if (str[r] > max) {
    max = str[r];
   }
  }
  //求出最大長度 用於判斷循環幾大輪 
  int length = (max + "").length();
       
      //取得(個位 十位 百位。。。。)基數     
  for (int b= 0,u=1; b < length; b++,u*=10) {
   for (int i = 0; i < str.length; i++) {
    int base = str[i] /u % 10;  //比如基數為 4
    //將基數按照規則放進桶中
    bucket[base][capacity[base]] = str[i];     //放進第四個桶中 的第一幾個當前容量位置
    capacity[base]++;   //容量增加
   }
   
   // 取出數據
   int d = 0;
   for (int k = 0; k < capacity.length; k++) {
    if (capacity[k] != 0) {
     for (int p = 0; p < capacity[k]; p++) {
      str[d] = bucket[k][p];
      d++;
     }
    }
    //注意:清零
    capacity[k] = 0;
   }
  }
 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM