Cod sursa(job #550792)

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