带你读《图解算法小抄》十四、排序(20)https://developer.aliyun.com/article/1348130?groupCode=tech_library
1)算法步骤
步骤一
第一步是计算输入数组 A 的所有元素的计数。然后将结果存储在计数数组 C 中。 计数的方法如下图所示。
步骤二
第二步是计算在输入数组 A 中存在多少个元素小于或等于给定索引的值。 Ci = 输入数组中小于或等于 i 的元素的数量。
步骤三
在这一步中,我们根据步骤二中构建的计数数组 C,将输入数组 A 的元素放置在排序位置上。我们使用结果数组 B 来存储排序后的元素。这里我们将 B 的索引从零开始处理。
function countingSort(arr) { if (arr.length <= 1) { return arr; } // 确定数组的范围 const max = Math.max(...arr); const min = Math.min(...arr); const range = max - min + 1; // 创建计数数组,并初始化为0 const countArray = new Array(range).fill(0); // 统计每个元素出现的次数 for (let i = 0; i < arr.length; i++) { const countIndex = arr[i] - min; countArray[countIndex]++; } // 根据计数数组重新排序原数组 let sortedIndex = 0; for (let i = 0; i < countArray.length; i++) { while (countArray[i] > 0) { arr[sortedIndex] = i + min; sortedIndex++; countArray[i]--; } } return arr; }
带你读《图解算法小抄》十四、排序(22)https://developer.aliyun.com/article/1348128?groupCode=tech_library