Cod sursa(job #550792)
#include <stdio.h>
#include <string.h>
int v[500001];
int i,N;
int aux[500001],auv[500001],x[500001];
struct list
{
int nod;
list *link;
}*R[10];
inline void add(int x,int y)
{
list *p;
p=new list;
p->nod=y;
p->link=R[x];
R[x]=p;
}
inline void radix()
{
int i,end,ind;
list *p,*q;
for(i=1;i<=N;i++) x[i]=v[i];
end=0;
while(!end)
{
end=0;
for(i=1;i<=N;i++)
{
if(x[i]) end=1;
add(x[i]%10,i);
x[i]/=10;
}
ind=0;
for(i=0;i<=9;i++)
{
p=R[i];
while(p)
{
aux[++ind]=x[p->nod];
auv[ind]=v[p->nod];
q=p;
p=p->link;
delete q;
}
}
for(i=1;i<=N;i++)
{
v[i]=auv[i];
x[i]=aux[i];
}
}
}
int main()
{
freopen("algsort.in","r",stdin);
freopen("algsort.out","w",stdout);
scanf("%d",&N);
for(i=1;i<=N;i++) scanf("%d",&v[i]);
radix();
for(i=1;i<N;i++) printf("%d ",v[i]);
printf("%d\n",v[N]);
return 0;
}