public class RadixSort {
public static void main(String[] args) {
int [] arr = new int[80000];
int[] temp = new int[arr.length];
for (int i = 0; i < arr.length; i++) {
arr[i] = (int) (Math.random()*8000000);
}
long start_Time = System.currentTimeMillis();
radixSort(arr);
long stop_Time = System.currentTimeMillis();
System.out.printf("耗费 %d ms",stop_Time - start_Time);
}
public static void radix(int[] arr){
int[][] bucket = new int[10][arr.length];
int[] bucketElementCounts = new int[10];
for (int i = 0; i <arr.length ; i++) {
int num =arr[i] % 10 ;
bucket[num][bucketElementCounts[num]++] = arr[i] ;
}
int intdex = 0;
for (int i = 0; i < bucketElementCounts.length; i++) {
if(bucketElementCounts[i] !=0){
for (int j = 0; j < bucketElementCounts[i]; j++) {
arr [intdex++] = bucket[i][j];
}
}
}
intdex =0;
System.out.println("========第一轮=========");
System.out.println(Arrays.toString(arr));
System.out.println("========第二轮=========");
bucketElementCounts = new int[10];
for (int i = 0; i <arr.length ; i++) {
int num =arr[i] /10% 10 ;
bucket[num][bucketElementCounts[num]++] = arr[i] ;
}
for (int i = 0; i < bucketElementCounts.length; i++) {
if(bucketElementCounts[i] !=0){
for (int j = 0; j < bucketElementCounts[i]; j++) {
arr [intdex++] = bucket[i][j];
}
}
}
intdex =0;
System.out.println(Arrays.toString(arr));
System.out.println("========第三轮=========");
bucketElementCounts = new int[10];
for (int i = 0; i <arr.length ; i++) {
int num =arr[i] /100 ;
bucket[num][bucketElementCounts[num]++] = arr[i] ;
}
for (int i = 0; i < bucketElementCounts.length; i++) {
if(bucketElementCounts[i] !=0){
for (int j = 0; j < bucketElementCounts[i]; j++) {
arr [intdex++] = bucket[i][j];
}
}
}
System.out.println(Arrays.toString(arr));
}
public static void radixSort(int[] arr){
int[][] bucket = new int[10][arr.length];
int[] bucketElementCounts = new int[10];
int intdex = 0;
int max = arr[0];
for (int i = 1; i < arr.length; i++) {
if(max < arr[i]){
max = arr[i];
}
}
int maxLength = (max +"").length();
for (int j = 0, n =1 ; j <maxLength ; j++ , n *= 10) {
for (int i = 0; i <arr.length ; i++) {
int num =arr[i] /n % 10 ;
bucket[num][bucketElementCounts[num]++] = arr[i] ;
}
intdex =0;
for (int i = 0; i < bucketElementCounts.length; i++) {
if(bucketElementCounts[i] !=0){
for (int k = 0; k < bucketElementCounts[i]; k++) {
arr [intdex++] = bucket[i][k];
}
}
bucketElementCounts[i] =0;
}
}
}
}