//-----------counting_sort------------------ template<typename T> void counting_sort(T a[],T b[],int k,int size) { int *c = new int [k+1]; for(int i =0;i<k+1;i++) { c[i]=0; } for(int j=0;j<size;j++) { c[a[j]]=c[a[j]]+1; } for(int i=1;i<k+1;i++) { c[i]=c[i]+c[i-1]; } for(int i=0;i<k+1;i++) printf("%d ",c[i]); printf("\n"); for(int j=size-1;j>=0;j--) { b[c[a[j]]]=a[j]; c[a[j]]=c[a[j]]-1; } } //---------------例如------------ { int data[]={2,5,3,0,2,3,0,3}; int data_1[9]; counting_sort(data,data_1,8,8); for(int i=0;i<8;i++) { printf("%d ",data[i]); } printf("\n"); for(int i=1;i<9;i++) { printf("%d ",data_1[i]); } printf("\n"); system("PAUSE"); return 0; }