【发布时间】:2016-02-12 22:14:26
【问题描述】:
这是我的 RadixSort 函数(升序):
void RadixSort (int a[], int n)
{
int i, m=0, exp=1, b[MAX];
for (i=0; i<n; i++)
{
if (a[i]>m)
m=a[i];
}
while (m/exp>0)
{
int bucket[10]={0};
for (i=0; i<n; i++)
bucket[a[i]/exp%10]++;
for (i=1; i<10; i++)
bucket[i]+=bucket[i-1];
for (i=n-1; i>=0; i--)
b[--bucket[a[i]/exp%10]]=a[i];
for (i=0; i<n;i++){
a[i]=b[i];
}
exp*=10;
}
}
我正在尝试通过替换将其更改为降序
for (i=0; i<n;i++) {
a[i]=b[i];
}
与
for (i=0; i<n;i++) {
a[i]=b[n-i-1];
}
但它没有用。 我试过:[705、1725、99、9170、7013]
但结果是:[9170, 7013, 1725, 99, 705]
最后一个值总是错误的。有什么我错过的吗?
【问题讨论】:
-
为什么不直接使用你的原始代码,然后当它完成后,反转列表?
-
最后一个值(按降序排序后)是否总是等于输入数组中的第一个值(排序前)?