Cod sursa(job #550801)

Utilizator blastoiseZ.Z.Daniel blastoise Data 9 martie 2011 22:12:55
Problema Sortare prin comparare Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 0.88 kb
#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;
}