public class CountSort {
public static void main(String args[]){
int[] data={-1,
50,49,48,47,46,45,44,43,42,41,
40,39,38,37,36,35,34,33,32,31,
30,29,28,27,26,25,24,23,22,21,
20,19,14,14,14,14,14,13,12,11,
10,9,8,7,6,5,4,3,2,2
};
int[] B=new int[data.length*2];
countingSort(data,B,1000);
print(B,data);
}
private static void print(int[] data,int[] A) {
for(int i=1;i<A.length;i++){
if(i%10==0)System.out.println();
System.out.print(data[i]+" ");
if(i<10)System.out.print(" ");
}
}
public static void countingSort(int[] A,int[] B,int k){
int[] C=new int[k];
for(int i=0;i<k;i++){
C[i]=0;
}
for(int i=1;i<A.length;i++){
C[A[i]]=C[A[i]]+1;
}
/*for(int i=0;i<k;i++){
System.out.print(C[i]+" ");
}*/
for(int i=1;i<k;i++){
C[i]=C[i]+C[i-1];
}
// for(int i=0;i<k;i++){
// System.out.print(C[i]+" ");
// }
// System.out.println();
// System.out.print("*************");
// for(int i=A.length-1;i>=0;i--){
// B[C[A[i]]]=A[i];
// C[A[i]]=C[A[i]]-1;//大小相同的下一个数序列向前推一个.
//// System.out.println("22222222222");
// }
for(int i=1;i<A.length;i++){
B[C[A[i]]]=A[i];
C[A[i]]=C[A[i]]-1;//大小相同的下一个数序列向前推一个.
// System.out.println("22222222222");
}
}
}
算法导论-CountingSort基数排序java实现
最新推荐文章于 2023-10-04 18:01:50 发布