计数排序代码测试:
/*********************************************************************************** 程序名称 :countingsort_test 功能描述 : 计数排序 修改历史 : 1.日 期 : 2015/10/7 作 者 : gqkly 内容 : ************************************************************************************/ #include <iostream> #include <time.h> using namespace std; typedef int ElemType; #define N 36 #define Init_A(A,n) {for(int i=0;i<n;i++)A[i]=rand()%90;} void Counting_Sort(ElemType *A, int len,ElemType max); void Print(ElemType *A,int len,char *string); int main() { double time_start,time_end; time_start=clock(); srand(NULL); ElemType A[N]; Init_A(A,N); Print(A,N,"Init:"); Counting_Sort(A,N,90); Print(A,N,"\nCounting_Sort:"); time_end=clock(); cout<<"\ntime used:"<<time_end-time_start<<endl; getchar(); return 0; } void Counting_Sort(ElemType *A, int len, ElemType max) { ElemType *B,*C; B=(ElemType*)malloc(len*sizeof(ElemType)); C=(ElemType*)malloc(max*sizeof(ElemType)); memset(C,0,max*sizeof(ElemType)); memset(B,0,len*sizeof(ElemType)); for (int j=0;j<len;j++) { C[A[j]]++; } for (int i=1;i<max;i++) { C[i]+=C[i-1]; } for (int j=len-1;j>=0;j--) { C[A[j]]--;//这两行代码的顺序跟《算法导论》伪代码顺序是相反的。 B[C[A[j]]]=A[j]; } for (int i=0;i<len;i++) { A[i]=B[i]; } free(B); free(C); } void Print(ElemType *A,int len,char *string) { cout<<string<<endl; for (int i=0;i<len;i++) { if (i%6==0) { cout<<endl; } if (A[i]/10==0) { cout<<" "<<A[i]<<" "; } else cout<<A[i]<<" "; } cout<<endl; }