import java.util.Arrays;
public class RadixSort {
public static void radixSort(int[] array) {
if (array.length == 0)
return;
int max = array[0];
for (int i = 1; i < array.length; i++) {
if (array[i] > max)
max = array[i];
}
int exp = 1, len = String.valueOf(max).length();
int[] bucket = new int[10];
while (len-- > 0) {
int[] tmp = new int[array.length];
System.arraycopy(array, 0, tmp, 0, array.length);
Arrays.fill(bucket, 0);
for (int i = 0; i < array.length; i++) {
int digit = (tmp[i] / exp) % 10;
bucket[digit]++;
}
for (int i = 1; i < bucket.length; i++) {
bucket[i] += bucket[i - 1];
}
for (int i = array.length - 1; i >= 0; i--) {
int digit = (tmp[i] / exp) % 10;
array[--bucket[digit]] = tmp[i];
}
exp *= 10;
}
}
public static void main(String[] args) {
int[] array = {5, 2, 9, 6, 1, 3, 12};
radixSort(array);
System.out.println(Arrays.toString(array));
}
}