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 }