import java.util.Arrays;
public class RadixSort {
public static void radixSort(int[] arr) {
int max = getMax(arr);
for (int exp = 1; max / exp > 0; exp *= 10) {
countingSortByDigit(arr, exp);
}
}
private static void countingSortByDigit(int[] arr, int exp) {
final int RADIX = 10;
int[] count = new int[RADIX];
int[] result = new int[arr.length];
for (int value : arr) {
count[(value / exp) % RADIX]++;
}
for (int i = 1; i < RADIX; i++) {
count[i] += count[i - 1];
}
for (int i = arr.length - 1; i >= 0; i--) {
result[count[(arr[i] / exp) % RADIX] - 1] = arr[i];
count[(arr[i] / exp) % RADIX]--;
}
System.arraycopy(result, 0, arr, 0, arr.length);
}
private static int getMax(int[] arr) {
int max = arr[0];
for (int value : arr) {
if (value > max) {
max = value;
}
}
return max;
}
public static void main(String[] args) {
int[] arr = {170, 45, 75, 90, 802, 24, 2, 66};
radixSort(arr);
System.out.println("线性计数排序后: " + Arrays.toString(arr));
}
}