void display (int a[],int len){
for(int i=0;i<len;i++){
printf("%d ",a[i]);
}
printf("\n");
}
int findMax(int a[],int len){
int max=a[0];
for(int i=1;i<len;i++){
if(max<a[i]){
max=a[i];
}
}
return max;
}
int cycleNum(int num){
int ok=0;
while(1){
num/=10;
if(num!=0){
ok++;
}
else{
ok++;
break;
}
}
return ok;
}
void radixSort(int a[],int len){
int cycle=cycleNum(findMax(a,len));
int weight=10;
int sub=1;
while((cycle--)>0){
// printf("%d,%d\n",weight,sub);
int b[10];
int c[10];
int d[len];
for(int i=0;i<10;i++){
b[i]=0;
c[i]=0;
d[i]=0;
}
for(int i=0;i<len;i++){
b[a[i]%weight/sub]++;
}
// display(b,10);
for(int i=0;i<10;i++){
for(int j=i;j>=0;j--){
c[i]+=b[j];
}
}
// display(c,10);
for(int i=len-1;i>=0;i--){
c[a[i]%weight/sub]-=1;
d[c[a[i]%weight/sub]]=a[i];
}
// display(d,len);
for(int i=0;i<len;i++){
a[i]=d[i];
}
// display(a,len);
// printf("---\n");
weight*=10;
sub*=10;
}
}
int main () {
int a[]={234324,222,35443,6434,2224,68,54,34543,234,676};
radixSort(a,sizeof(a)/sizeof(int));
display(a,sizeof(a)/sizeof(int));
int a1[]={324,35,532,246,2578,0,0,1,23423};
radixSort(a1,sizeof(a1)/sizeof(int));
display(a1,sizeof(a1)/sizeof(int));
int a2[]={3,2,5,6,3,6,8,8,3,3,7,9,0,4,2};
radixSort(a2,sizeof(a2)/sizeof(int));
display(a2,sizeof(a2)/sizeof(int));
}