不好意思,以下是我的基數排序,算法應該都對但是第四、第五、第七測試點怎樣就是過不了,希望能有高手解惑,謝謝!!
#include <stdio.h>
#include <string.h>
#define MaxSize 1000000
int a[MaxSize] , q[10][MaxSize / 10];
int LengthJudge(int);
int main()
{
int n , N , k , j , c , max , MaxLength , num[10] = {0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0};
scanf("%d" , &N);
for(k = 0 , max = 0 ; k < N ; k++)
{
scanf("%d" , &a[k]);
if(a[k] > max)
{
max = a[k];
}
}
MaxLength = LengthJudge(max);
n = 1;
while(n <= MaxLength)
{
for(k = 0 ; k < N ; k++)
{
c = (a[k] / n) % 10;
q[c][num[c]] = a[k];
num[c]++;
}
k = 0;
for(c = 0 ; c < 10 ; c++)
{
if(num[c] != 0)
{
for(j = 0 ; j < num[c] ; j++)
{
a[k] = q[c][j];
k++;
}
}
num[c] = 0;
}
n *= 10;
}
for(k = 0 ; k < N ; k++)
{
printf("%d " , a[k]);
}
printf("\n");
return 0;
}
int LengthJudge(int max)
{
int t = 0 , k = 1;
while(max > 0)
{
max /= 10;
t++;
}
while(t--)
{
k *= 10;
}
return k;
}