算法步骤
动图演示
复杂度
时间复杂度 = O(n + k)空间复杂度 = O(n)
代码实现
public static void countingsort(int[] arr,int min, int max) {
int[] arrs = new int[arr.length];
int[] nums = new int[max - min + 1];
//数组 计数
for (int i = 0; i < arr.length; i++) {
nums[arr[i] - min]++;
}
//计数累加
for (int i = 1; i < nums.length; i++) {
nums[i] += nums[i - 1];
}
//反向填充
for (int i = arr.length - 1; i >= 0; i--) {
int number = arr[i];
int count = nums[number];
arrs[count - 1] = number;
nums[number]--;
}
}