https://www.cs.usfca.edu/~galles/visualization/RadixSort.html
public void radixSort(int[] nums) {
int n = nums.length;
int maxVal = nums[0];
for (int i = 1; i < n; i++) {
if (nums[i] > maxVal) maxVal = nums[i];
}
int exp = 1;
int radix = 10;
int[] aux = new int[n];
int[] count = new int[radix];
while (maxVal / exp > 0) {
Arrays.fill(count, 0);
for (int i = 0; i < n; i++) {
count[(nums[i] / exp) % 10]++;
}
for (int i = 1; i < radix; i++) {
count[i] += count[i-1];
}
for (int i = n-1; i >= 0; i--) {
int idx = --count[(nums[i] / exp) % 10];
aux[idx] = nums[i];
}
for (int i = 0; i < n; i++) {
nums[i] = aux[i];
}
exp *= 10;
}
System.out.println();
}