@Override publicint[] sort(int[] arr) { int n = arr.length;
// 查找数组中数据的范围 int max = arr[0]; for (int i = 1; i < n; ++i) { if (max < arr[i]) { max = arr[i]; } }
// 申请一个计数数组 c,下标大小 [0, max] int[] c = newint[max + 1]; for (int i = 0; i <= max; ++i) { c[i] = 0; }
// 计算每个元素的个数,放入 c 中 for (int value : arr) { c[value]++; }
// 依次累加 for (int i = 1; i <= max; ++i) { c[i] = c[i - 1] + c[i]; }
// 临时数组 r,存储排序之后的结果 int[] r = newint[n]; // 计算排序的关键步骤,有点难理解 for (int i = n - 1; i >= 0; --i) { int index = c[arr[i]] - 1; r[index] = arr[i]; c[arr[i]]--; }