计数排序
假设 n 个输入元素中的每一个都是 [0, k) 区间内的一个整数,其中 k 为 某个整数。当 k = O(n) 时,排序的运行时间为 Θ(n)。
基本思想
对每一个输入元素 x,确定小于 x 的元素个数 n。x 放在第 n+1 个输出位置上。当有几个元素相同时,这个方案要略作修改。
代码实现
void CountingSort(int a[], int b[], int k, int n) { int *c = new int[k](); for (int i = 0; i < n; i++) {//统计输入元素 x 的个数,即(a) c[a[i]] ++; } for (int i = 1; i < k; i++) {//计算 x 的输出位置,即(b) c[i] += c[i - 1]; } for (int i = n - 1; i >= 0; i--) {//按位置放置 x b[c[a[i]] - 1] = a[i]; c[a[i]]--; } }
124