计数排序假设n个输入元素中的每一个都是介于0到k之间的整数,此处k为某个整数。
public static int[] Sort1(int [] A,int k){
//k表示数组A中的最大值
int [] C=new int[k+1];//临时数组C
int [] B=new int[A.length];//B存放结果
//首先是通过一个数组C[i]计算等于i的元素个数,
for(int i=0;i<A.length;i++){
C[A[i]]++;
}
//接着计算小于或者等于i的元素个数,数组C的下标从1开始
for(int i=1;i<=k;i++){
C[i]=C[i]+C[i-1];
}
//从后向前遍历,保证稳定性
for(int i=A.length-1;i>=0;i--){
//C[A[i]]表示A[i]在数组B中的位置,因为B[i]从0开始,不是从1开始,所以要减1
B[C[A[i]]-1]=A[i];
C[A[i]]--;
}
return B;
}