import java.util.Arrays;
public class RadixSort {
public static int findMax(int[] arr) {
int max = arr[0];
for (int i = 1; i < arr.length; i++) {
if (arr[i] > max) {
max = arr[i];
}
}
return max;
}
public static int calBitCount(int max) {
int count = 0;
while (max > 0) {
max /= 10;
count++;
}
return count;
}
public static int getBitValue(int value, int bit) {
for (int i = 0; i < bit; ++i) {
value /= 10;
}
return value % 10;
}
public static void radixSort(int[] arr) {
int max = findMax(arr);
int bitCount = calBitCount(max);
int radixCount = 10;
int[] count = new int[radixCount];
int[] tempArray = new int[arr.length];
for (int b = 0; b < bitCount; ++b) {
Arrays.fill(count, 0);
for (int i = 0; i < arr.length; ++i) {
int bitValue = getBitValue(arr[i], b);
count[bitValue]++;
}
for (int c = 1; c < radixCount; ++c) {
count[c] += count[c - 1];
}
for (int i = arr.length - 1; i >= 0; --i) {
int bitValue = getBitValue(arr[i], b);
tempArray[count[bitValue] - 1] = arr[i];
count[bitValue]--;
}
System.arraycopy(tempArray, 0, arr, 0, arr.length);
}
}
public static void printArray(int[] arr) {
for (int value : arr) {
System.out.print(value + " ");
}
System.out.println();
}
public static void main(String[] args) {
int[] arr = {17, 5, 75, 190, 411, 44, 12, 66};
System.out.println("原始数组:");
printArray(arr);
radixSort(arr);
System.out.println("排序后的数组:");
printArray(arr);
}
}