算法基本流程图解: 后续补
算法时间复杂度 : O(n)
算法设计思想:
原始队列中的每个元素,记录在一个大队列中. 大队列中的元素没出现一次+1,保证元素的有序,不需要比较.空间复杂度较高
代码实现:
private void sort(int[] arr) {
int max = arr[0];
for (int i = 1; i < arr.length; i++) {
if (arr[i] > max) max = arr[i];
}
int[] counter = new int[max + 1];
// 计数 每个值 出现的次数
for (int i = 0; i < arr.length; i++) {
counter[arr[i]] += 1;
}
// 记录值所在位置
for (int i = 1; i < counter.length; i++) {
counter[i] += counter[i - 1];
}
// 当前counter为有序序列、将有序序列中需要的值,取出放入 原始数组的copy对象中
int[] temp = new int[arr.length];
for (int i = 0; i < arr.length; i++) {
int idx = counter[arr[i]] - 1;
temp[idx] = arr[i];
counter[arr[i]] -= 1;
}
for (int i = 0; i < temp.length; i++) {
arr[i] = temp[i];
}