#include #include using namespace std; struct student{ int id; int score; }; int maxbit(student data[], int n) //辅助函数,求数据的最大位数 { int d=1;//统计最大的位数 int p=10; for(int i=0;i=p) { p*=10; ++d; } } return d; } void RadixSort(student data[], int n) //基数排序 { int d=maxbit(data,n); //求最大位数 student *tmp=new student[n]; //辅助数组 int *count=new int[10]; //计数器 int i,j,k; int radix=1; for(i=1;i<=d;i++) //进行d次排序 { for(j=0;j<10;j++) count[j]=0; //每次分配前清空计数器 for(j=0;j=0;j--) //将所有桶中记录依次收集到tmp中 { k=(data[j].score/radix)%10; tmp[--count[k]]=data[j]; } for(j=0;j