桶式排序java實現代碼

jopen 11年前發布 | 52K 次閱讀 Java Java開發

/**

  • 基數排序
  • 結合桶式排序,分兩種從高位到低位和從低位到高位。案例代碼為從低位到高位
  • 第一步:得到數組內最大位數
  • 第二步:進行多次 桶式排序,次數為排序最大數字的位數
  • 例子:52,38,23,72,271
  • 第一步:數組元素最大位數為3,
  • 第二步:第一次桶式排序,針對數組元素的個位:排序結果為:271,52,72,23,38,按個位桶式排序就完成了
  • 繼續: 第二次桶式排序,按照數組元素的十位:排序結果為:23,38,52,271,72
  • 繼續: 第三次桶式排序,按照數組元素的百位:排序結果為:23,38,52,72,271
  • 排序完成。
  • @author / public class RadixSort { private static int[] array = new int[]{51,82,23,94,35,76,117,238,909,40,11}; public static void main(String args[]){ // getNumberLength(905559);
     System.out.println("排序前");
     printArray(array);
     System.out.println("\n排序后");
     radixSort();
     printArray(array);
    
    } private static void radixSort(){
      int maxW = 0;
      int index=0;
      //第一步:得到數組內最大元素的位數
      for(int i=0;i<array.length;i++){
          if(maxW<array[i]){
              maxW = array[i];
          }
      }
    
    // System.out.println("maxW is:"+maxW);
      maxW = getNumberLength(maxW);
    
    // System.out.println("最大位數為:"+maxW);
      //第二步:進行多次 桶式排序,次數為排序最大數字的位數
      while(index<maxW){
          int[] tempArray = new int[array.length];
          int[] bucketArray = new int[10];
          System.arraycopy(array, 0, tempArray, 0, array.length);
          for(int i=0;i<array.length;i++){
              bucketArray[getNumberIndex(index, array[i])]++;
          }

// System.out.println("臨時數組內容:"); // printArray(bucketArray); // System.out.println(); for(int i=1;i<bucketArray.length;i++){ bucketArray[i]=bucketArray[i]+bucketArray[i-1]; } for(int i=array.length-1;i>=0;i--){ array[--bucketArray[getNumberIndex(index, tempArray[i])]] = tempArray[i]; } index++; // System.out.println("第"+index+"排序后:"); // printArray(array); // System.out.println(); } }

 private static int getNumberIndex(int index,int number){
     int num=0;
     num = (int)(number/Math.pow(10, index))%10;

// System.out.println("number is:"+num); return num; }

 private static int getNumberLength(int number){
     int count = 1;
     int index = 1;

// System.out.println("math:"+((int)(number/Math.pow(10, index)))); while((int)(number-Math.pow(10, index))>0){ count++; index++; } System.out.println("count is:"+count); return count; }

 public static void printArray(int[] array){  
    for(int i=0;i<array.length;i++){  
        System.out.print(array[i]+"   ");  
    }  
 } 

}</pre>運行結果:

    排序前  
    51   82   23   94   35   76   117   238   909   40   11     
    排序后  
    count is:3  
    11   23   35   40   51   76   82   94   117   238   909     
來自:http://blog.csdn.net/hailushijie/article/details/8797994

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!