计数排序假设 n 个输入元素中的每一个的排序关键字都是在 0 到 k 区间(左闭右开)内的一个整数。对每一个输入元素 x ,确定小于 x 的元素个数,然后利用元素个数直接将序列按顺序排好放到输出序列中。
3. 实现
3.1 伪代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
CountingSort(A, Key, k) { // 定义新数组 B & C define B[0..A.length] define C[0..k] // 初始化数组 C for i = 0 to k C[i] = 0 // 统计每个关键字的元素数量 for j = 1 to A.length C[Key[j]] = C[Key[j]] + 1 // 统计关键字小于等于 i 的元素数量 for i = 1 to k C[i] = C[i] + C[i-1] for j = A.length downto 1 B[C[Key[j]]] = A[j] C[Key[j]] = C[Key[j]] - 1 // 将已排好序的 B 数组拷贝给 A 数组 A = B }