RedixSort基数排序(罗召勇版)

 1 package radixsort;
 2 
 3 import java.util.Arrays;
 4 
 5 public class RadixSort {
 6     public static void main(String[] args) {
 7         int[] arr = new int[]{3,55,965,1214,111,527,684,952,22,336,11};
 8         System.out.println(Arrays.toString(arr));
 9         radixSort(arr);
10         System.out.println(Arrays.toString(arr));
11     }
12 
13     public static void radixSort(int[] arr){
14         //取到数组中最大的数
15         int max = 0;
16         for (int i=0;i<arr.length;i++){
17             if (arr[i]>max){
18                 max=arr[i];
19             }
20         }
21 
22         //计算最大数的位数
23         int maxLength = (max+"").length();
24         System.out.println(maxLength);
25 
26         //安排一个二维数组用于存储临时数据
27         int[][] temp = new int[10][arr.length];
28         //安排一个一维数组用于存放计数器,计算二维数组中数数
29         int[] count = new int[10];
30 
31         //根据最大数的位数决定比较的轮数
32         for (int i=0,n=1;i<maxLength;i++,n*=10){
33             //第一轮取个位
34             for (int j=0;j<arr.length;j++){
35                 //计算标记位
36                 int yS = arr[j]/n%10;
37                 temp[yS][count[yS]]=arr[j];
38                 count[yS]++;
39             }
40             //桶内元素送还数组
41             int d=0;
42             for (int k=0;k<count.length;k++){
43                 for (int s=0;s<count[k];s++){
44                     arr[d] = temp[k][s];
45                     d++;
46                 }
47                 count[k]=0;
48             }
49         }
50     }
51 }

 

posted @ 2021-02-28 16:55  TRAODM  阅读(40)  评论(0)    收藏  举报