我们需要编写一个JavaScript函数,该函数接受一个数字数组并使用计数排序算法对其进行排序。
如果知道最大值,则可以使用计数排序算法对线性时间和空间中的数字数组进行排序。使用最大值创建一个具有该大小的数组,以计算每个索引值的出现。
然后,我们将计数为非零的所有索引提取到结果数组中。
首先,我们将使用一个循环来找出数组的最大元素,一旦有了,我们将使用计数排序对数组进行排序。
const arr = [4, 3, 1, 2, 3]; const findMaximum = arr => arr.reduce((acc, val) => val > acc ? val: acc, Number.MIN_VALUE) const countingSort = (arr = []) => { const max = findMaximum(arr); const counts = new Array(max + 1); counts.fill(0); arr.forEach(value => counts[value]++); const res = []; let resultIndex = 0; counts.forEach((count, index) => { for (let i = 0; i < count; i++) { res[resultIndex] = index; resultIndex++; }; }); return res; }; console.log(countingSort(arr));
输出结果
控制台中的输出将是-
[ 1, 2, 3, 3, 4 ]