public static void keyIndexedCounting(String[] a) {
int N = a.length;
int R = 5;
String[] aux = new String[N];
int[] count = new int[R + 1];
// 计算出现频率
for (int i = 0; i < N; i++) {
count[a[i].key() + 1]++;
}
// 将频率转换为索引
for (int r = 0; r < R; r++) {
count[r + 1] += count[r];
}
// 将元素分类
for (int i = 0; i < N; i++) {
aux[count[a[i].key()]++] = a[i];
}
// 回写
for (int i = 0; i < N; i++) {
a[i] = aux[i];
}
// 键索引计数法 (a[].key()为[0,R)之间的一个整数), 是一种对于小整数键排序非常有效的排序方法。
// 排序N个键为0到R-1之间的整数的元素需要访问数组11N+4R+1次
}