从个位开始排,随着高位依次进桶出桶
// arr[begin..end]排序
public static void radixSort(int[] arr, int L, int R, int digit) {
final int radix = 10;
int i = 0,j = 0;
// 有多少个数准备多少个辅助空间
int[] buket = new int[R - L + 1];
for (int d = 1;d < digit; d++) {
// 有多少位就进出几次
// 10个空间
// count[0] 当前位(d位)是0的数字有多少个
// count[1] 当前位(d位)是0~1的数字有多少个
int[] count = new int[raidx]; // count[0..9]
// 词频
for (i = L;i < R; i++){
j = getDigit(arr[i], d)
count[j]++;
}
// 前缀和
for (i = 1;i< radix; i++) {
count[i] = count[i] + count[i - 1];
}
// 出桶
for(i = R;i >= L; i--) {
j = getDigit(arr[i], d);
bucket[count[j] - 1] = arr[i];
count[j]--;
}
// 把出桶的数据放到ARR里
for (i = L, j=0; i <= R; i++, j++) {
arr[i] = bucket[j];
}
}
}