计数排序使用一个用来存储每个元素在原始 数组中出现次数的临时数组。在所有元素都计数完成后,临时数组已排好序并可迭代以构建排序 后的结果数组。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| function countingSort(array) { if (array.length < 2) { return array; } const maxValue = findMaxValue(array); const counts = new Array(maxValue + 1); array.forEach((element) => { if (!counts[element]) { counts[element] = 0; } counts[element]++; }); let sortedIndex = 0; counts.forEach((count, i) => { while (count > 0) { array[sortedIndex++] = i; count--; } }); return array; }
function findMaxValue(array) { let max = array[0]; for (let i = 1; i < array.length; i++) { if (array[i] > max) { max = array[i]; } } return max; }
const arr = [9, 3, 7, 4, 6];
console.log(countingSort(arr));
|