void CountSort(int A[], int B[], int k)
{
int *C=new int[k+1];
for(int i=0; i<=k; i++)
C[i]=0;
//C[i]包含等于i的元素个数
for(i=0; i<len; i++)
C[A[i]]++;
//C[i]包含小于等于i的元素个数
for(i=1; i<=k; i++)
C[i]+=C[i-1];
for(i=len-1; i>=0; i--)//从后往前处理A中的元素,以保证稳定性
{
B[C[A[i]]-1]=A[i];//C[A[i]]表示A[i]在B中的位置,但B[i]从0开始,不是从1开始,所以要减1
C[A[i]]--;//可处理元素重复问题
}
}
计数排序
最新推荐文章于 2024-11-16 14:38:00 发布