Pagini recente » Cod sursa (job #901376) | Cod sursa (job #1615157) | Cod sursa (job #2233202) | Cod sursa (job #1164088) | Cod sursa (job #1025590)
#include<stdio.h>
#define MAX 500001
#define DIV 10
#include<vector>
using namespace std;
int n,v[MAX];
vector<int> ap[DIV];
struct nod
{
int nr;
nod *child[DIV];
nod()
{
nr=0;
for(int i=0;i<10;++i)child[i]=NULL;
}
}*root;
void addNR(int n,nod **nd)
{
//nod *nd=*root;
if((*nd)==NULL)(*nd)=new nod;
int aux=100000000;
nod *nda=*nd;
for(int i=0;i<9;++i)
{
if((nda)->child[(n/aux)%10]==NULL)(nda)->child[(n/aux)%10]=new nod;
(nda)=(nda)->child[(n/aux)%10];
aux/=10;
}
(nda)->nr=(nda)->nr+1;
}
void print(nod *nd,int nr)
{
for(int i=0;i<nd->nr;++i)
printf("%d ",nr);
for(int i=0;i<10;++i)
if(nd->child[i]!=NULL)
{
nr=nr*10+i;
print(nd->child[i],nr);
nr/=10;
}
}
int main()
{
freopen("algsort.in","r",stdin);
freopen("algsort.out","w",stdout);
scanf("%d",&n);
root=new nod;
for(int i=0;i<n;++i){scanf("%d",&v[i]);addNR(v[i],&root->child[(i/1000000000)%10]);}
print(root,0);
//killed by signal :-L
/*bool ok=true;
int p=1;
int time=1;
while(ok)
{
ok=false;
for(int i=0;i<n;++i){if((v[i]/p)%DIV!=0)ok=true;ap[(v[i]/p)%DIV].push_back(v[i]);}
int ind=0;
for(int i=0;i<DIV;++i)
for(int j=0;j<ap[i].size();++j)v[ind++]=ap[i][j];
p*=DIV;
for(int i=0;i<DIV;++i)ap[i].clear();
time++;
if(time==11)break;
}
for(int i=0;i<n;++i)printf("%d ",v[i]);*/
return 0;
}