
#include<stdio.h>
#include<stdlib.h>
void radix_sort(int A[],int N)
{
int max=A[0];
int i;
for(i=0;i<N;i++)
{
max=(max>A[i])?max:A[i];
}
int *t=(int *)malloc(sizeof(int)*N);
if(NULL==t)/*NULL==t比t==NULl安全,如果将==写成=,NULL=t会报错,因为不能将变量的值赋给常数*/
{
printf("F");
exit(1);
}
int base=1;
while(max/base>0)/*错误:max/base>=10,最后一次无法进入循环*/
{
int count[10]={0};
for(i=0;i<N;i++)
{
/*计数*/
count[(A[i]/base)%10]++;
}
for(i=1;i<10;i++)
{
/*累加*/
count[i]=count[i]+count[i-1];
}
for(i=N-1;i>=0;i--)/*粗心的错误:i++*/ /*倒序存储*/
{
/*存储到t[]*/
t[count[(A[i]/base)%10]-1]=A[i];
count[(A[i]/base)%10]--;
}
for(i=0;i<N;i++)
{
/*t[]复制到A[]*/
A[i]=t[i];
}
base*=10;
}
}
int main()
{
int A[7]={100,34,1002,1234,66,137,49};
int N=7;
radix_sort(A,N);
int i;
for(i=0;i<N;i++)
{
printf("%d ",A[i]);
}
return 0;
}