import java.util.Arrays;
public class RadixSort {
public static void main(String[] args) {
int[] arr = new int[]{0,879,78,56,4,15,23,11,47,22,100};
System.out.println("排序之前:");
System.out.println(Arrays.toString(arr));
radixSort(arr);
System.out.println("排序之後:");
System.out.println(Arrays.toString(arr));
}
public static void radixSort(int [] arr){
int max = Integer.MIN_VALUE;
for (int i = 0; i < arr.length; i++){
if (arr[i] > max){
max = arr[i];
}
}
//計算最大數據的位數
//先將整數轉化爲字符串,然後調用字符串長度函數
int maxNumberLength = (max + "").length();
//創建臨時數組來存放數字
int[][] temp = new int[10][arr.length];
//記錄temp數組中相應位置的數字的數量
int[] count = new int[10];
//根據最大數據的位數來決定比較測次數
for (int i = 0, n = 1; i < maxNumberLength; i++, n *= 10){
//計算每個數字的餘數
for (int j = 0; j < arr.length; j++){
//取餘數
int moduleNumber = arr[j]/n%10;
//將當前遍歷的數字放入指定的數組中
temp[moduleNumber][count[moduleNumber]] = arr[j];
//記錄數量
count[moduleNumber]++;
}
//記錄取出的數字所放的位置
int index = 0;
//把數字取出來
for (int k = 0; k < count.length; k++){
//從計數數組中取出數字
if (count[k] != 0){
//循環取出數字
for (int l = 0; l < count[k]; l++){
arr[index] = temp[k][l];
//記錄下一個位置
index++;
}
//將數量置空
count[k] = 0;
}
}
}
}
}