口诀:清桶入桶计基,倒排乘基循环。
void RadixSort(int a[],int n) { int i,j,k=0; //编号序号 int count[10]; //桶数 int temp[n]; //临时存储数组 int d=maxbit(a,n); //获取最多有多少位数 int radix=1; //基数 for(j=1;j<=d;j++) { for(i=0;i<10;i++) count[i]++; //清桶 for(i=0;i<n;i++) //入桶 { k=a[i]/radix%10; count[k]++; } for(i=1;i<10;i++) count[i]+=count[i-1]; //计基,注意从1开始 for(i=n-1;i>=0;i--) //倒排,因为入桶的顺序是从0-n;出桶时应该是相反的顺序 { k=a[i]/radix%10; temp[--count[k]]=a[i]; } for(i=0;i<n;i++) a[i]=temp[i]; //排序,将临时数组中的内容取出 radix*=10; //乘基 } //循环 } int maxbit(int a[],int n) { int d=1; int radix=10; for(int i=0;i<n;i++) { while(a[i]>=p) { p*=10; ++d; } } return d;