计数排序

来源:互联网 发布:电视软件(无需联网) 编辑:程序博客网 时间:2024/06/05 15:39

计数排序(Counting Sort)

@[计数排序|算法]

计数排序是一种线性时间复杂度的排序算法。其特点是:

  • 时间复杂度Θ(k+n)
  • 稳定性 :具有相同值的元素在输出数组的相对次序和输入数组一致;
  • 局限性 :只适用于整数排序,且实际应用中要求输入数组数值范围k不能太大。

  • 计数排序Counting Sort
    • 前提假设
    • 基本思想
    • 代码实现

前提假设

  • 假设输入数组Arr的元素满足:Arr[i]{1,2,3,,k}
  • 输入未排序数组A[1,,n],输出已排序数组B[1,,n],临时存储空间:C[0,1,,k]

基本思想

对每一个输入元素x,统计小于x的元素个数。利用这一信息,就可以直接把元素x放到输出数组中对应的位置上。

代码实现

void CountingSort(int A[],int B[],int k){    int i,C[k+1];    for(i=0,i<=k,i++){ // let C[0,...,k]=0        C[i] = 0;    }    for(i=0,i<A.length,i++){ // counting numbers        C[A[i]] = C[A[i]]+1;    }    for(i=1,i<=k,i++){        C[i] = C[i]+C[i-1];    }    for(i=A.length-1,i>=0,i--){        B[C[A[i]]] = A[i];        C[A[i]] = C[A[i]]-1;    }}
0 0
原创粉丝点击