Javaビッグデータプラットフォーム開発研究ノート(13)-基数ソート

1.データ構造とアルゴリズム:


1.1。基数ソートメソッドを作成します。

public static void radixSort(int[] arr){
    
    
     //记录 arr[] 最大值 到 max
     int max = arr[0];
     for (int i=0; i<arr.length; i++){
    
    
         if(arr[i] > max){
    
    
             max = arr[i];
         }
     }

     //记录 arr[] 最大值的位数 到 maxLength
     int maxLength = (""+max).length();

     //定义数组 bucket bucketElementCounts
     int[][] bucket = new int[10][arr.length];
     int[] bucketElementCounts = new int[10];

     for(int i=0,n=1; i < maxLength; i++,n*=10) {
    
    
         //把数据放入桶
         for (int j=0; j < arr.length; j++) {
    
    
             int digiOfElement = arr[j] / n % 10;
             bucket[digiOfElement][bucketElementCounts[digiOfElement]] = arr[j];
             bucketElementCounts[digiOfElement]++;
         }
         //把数据取出桶
         int index = 0;
         for (int k = 0; k < bucketElementCounts.length; k++) {
    
    
             if (bucketElementCounts[k] != 0) {
    
    
                 for (int l = 0; l < bucketElementCounts[k]; l++) {
    
    
                     arr[index++] = bucket[k][l];
                 }
             }
             bucketElementCounts[k] = 0;
         }
     }
 }
 

1.2。主な方法:

public static void main(String[] args) {
    
    
      //随机创建8万 个数据
      int arr[]= new int[80000];
      int temp[] = new int[arr.length];
      for(int i=0; i<arr.length; i++){
    
    
          arr[i] = (int)(Math.random()*80000);
      }
      //计算 冒泡排序时间
      double start = System.currentTimeMillis();
      System.out.println("计时开始:");
      radixSort(arr);//此处写要测试的代码
      double end = System.currentTimeMillis();
      System.out.println("计时结束, 共耗时:"+ (double)((end-start)/1000) +"秒");
}
    

2020年9月12日にChiKong_Tamによって書かれた

おすすめ

転載: blog.csdn.net/qq_42209354/article/details/108557063