根据算法导论的讲解。这里主要需要理解A,B,C。
A为原始数据集合
B为存放排序结果的集合
C为记录比元素值小的数的个数
public class CountingSort {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
int []A = {4,3,3,2,2,2,2,1,1,1,1,1,1,1,1};
int []B = new int[15];
countingSort(A,B,4);
for (int i = 0; i < A.length; i++) {
System.out.println(B[i]+" ");
}
}
public static void countingSort(int []A,int []B,int k){
int []C = new int[k+1];
for (int i = 0; i < A.length; i++) {
C[A[i]]++;
}
for (int i = 1; i < C.length; i++) {
C[i]=C[i-1]+C[i];
}
for (int i = A.length-1; i >= 0; i--) {
B[--C[A[i]]] = A[i];
}
}
}