第八章 线性时间排序

计数排序

假设 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

猜你喜欢

转载自www.cnblogs.com/bjxqmy/p/12549729.html