📅  最后修改于: 2023-12-03 14:56:43.020000             🧑  作者: Mango
计数算法是一种简单而又实用的算法,它的思想是统计每个元素出现的次数,然后根据这些计数值得出有序序列。
计数排序的核心在于将输入的数据值转化为键存储在额外开辟的数组空间中。
下面是Java代码实现计数排序:
public static void countingSort(int[] arr) {
if (arr == null || arr.length == 0) {
return;
}
int max = arr[0];
int min = arr[0];
for (int i = 1; i < arr.length; i++) {
if (arr[i] > max) {
max = arr[i];
}
if (arr[i] < min) {
min = arr[i];
}
}
int[] countArr = new int[max - min + 1];
Arrays.fill(countArr, 0);
for (int i = 0; i < arr.length; i++) {
countArr[arr[i] - min]++;
}
int j = 0;
for (int i = 0; i < countArr.length; i++) {
while (countArr[i] > 0) {
arr[j] = i + min;
j++;
countArr[i]--;
}
}
}
计数排序是一种稳定的排序算法,在对一些大小范围比较小的整数排序时,它的性能要优于快速排序等基于比较排序的算法。
时间复杂度:O(n + k),其中n是待排序的数组的元素个数,k是待排序的数组的最大值和最小值之差。
空间复杂度:O(n + k)。
计数排序是一种简单而又实用的算法,它适用于待排序的元素在一个比较小的范围内出现的情况,可以在一定程度上优化时间复杂度,是一种必备的排序算法之一。