计数排序
louzhedong opened this issue · comments
Miracle commented
算法名称
计数排序
实现思路
- 使用一个额外的数组来统计每个数字出现的次数
- 通过数组中的最大值和最小值来计算额外数组的大小
- 遍历原数组,在额外数组中进行统计
- 遍历额外数组,构建新的数组
算法分析
时间复杂度为O(N),但空间复杂度较高,是一种以空间换时间的算法
算法实现
function CountSort(array) {
var length = array.length;
var min = Number.MAX_VALUE;
var max = Number.MIN_VALUE;
for (var i = 0; i < length; i++) {
if (array[i] < min) {
min = array[i];
}
if (array[i] > max) {
max = array[i];
}
}
var distance = max - min;
var countArray = [];
for (var i = 0; i <= distance; i++) {
countArray[i] = 0;
}
for (var i = 0; i < length; i++) {
countArray[array[i] - min] += 1;
}
var result = [];
for (var i = 0; i <= distance; i++) {
for (j = 0; j < countArray[i]; j++) {
result.push(i + min);
}
}
return result;
}