计数排序是一种很有意思的排序,但是其输入数据有严格的要求,其一每个元素都必须是整数,其二每个元素需是大于或等于0的整数,其代码实现如下:
void countingSort(int *A,int n,int k){
int *C=new int[k+1];
int *B=new int[n];
for(int i=0;i<=k;i++)
C[i]=0;
for(int i=0;i<n;i++)
C[A[i]]++;
for(int i=1;i<=k;i++)
C[i]+=C[i-1];
for(int i=n-1;i>=0;i--){
B[--C[A[i]]]=A[i];
}
for(int i=0;i<n;i++)
A[i]=B[i];
}
其时间复杂度为O(n),即线性时间排序.