Cod sursa(job #550801)
#include <stdio.h>
#include <string.h>
int v[500001];
int i,N,ind;
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 unmount(list *p)
{
if(p->link!=NULL) unmount(p->link);
v[++ind]=p->nod;
delete p;
}
inline void radix()
{
int i,end,pow;
list *p,*q;
end=0;
pow=1;
while(!end)
{
end=1;
memset(R,NULL,sizeof(R));
for(i=1;i<=N;i++)
{
if(v[i]/pow) end=0;
add(v[i]/pow%10,v[i]);
}
ind=0;
for(i=0;i<=9;i++)
{
p=R[i];
if(p) unmount(p);
}
pow*=10;
}
}
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;
}