口诀:清桶入桶计基,倒排乘基循环。
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;
浙公网安备 33010602011771号