#include <stdio.h>
void input(int [],int);
void sort(int [],int);
int maxval(int [],int);
int no_of_digits(int);
void disp(int [],int);
int noofpasses(int [],int);
int main()
{
int ar[50],m;
printf("\nEnter the number of elements : ");
scanf("%d",&m);
printf("\nPlease enter the elements : ");
input(ar,m);
printf("\nBefore sorting elements are : ");
disp(ar,m);
sort(ar,m);
printf("\nAfter sorting elements are : ");
disp(ar,m);
return 0;
}
void input(int a[],int g)
{
int i;
for(i=0; i<g; i++)
scanf("%d",&a[i]);
}
void disp(int a[],int g)
{
int i;
for(i=0; i<g; i++)
printf("%d,",a[i]);
}
int maxval(int a[],int g)
{
int i,max;
max=a[0];
for(i=1; i<g; i++)
{
if(a[i]>max)
max=a[i];
}
return max;
}
int no_of_digits(int g)
{
int t=0;
while(g>0)
{
t++;
g=g/10;
}
return t;
}
int noofpasses(int a[],int g)
{
int p;
p=maxval(a,g);
p=no_of_digits(p);
return p;
}
void sort(int ar[],int g)
{
int noel[10],r=1,no_of_passes,i,bckt[10][50],j,pos,k,c;
no_of_passes=noofpasses(ar,g);
for(i=0; i<no_of_passes; i++)
{
for(j=0; j<10; j++)
noel[j]=0;
for(j=0; j<g; j++)
{
pos=(ar[j]/r)%10;
bckt[pos][noel[pos]++]=ar[j];
}
k=0;
for(j=0; j<10; j++)
{
for(c=0; c<noel[j]; c++)
ar[k++]=bckt[j][c];
}
r=r*10;
}
}