Cod sursa(job #713427)

Utilizator geniucosOncescu Costin geniucos Data 14 martie 2012 17:18:33
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.84 kb
#include<cstdio>
#include<cstring>
using namespace std;
int maxi,imp,*a,*b,*aux,i,n,j,ap[13],p[13],x[500002],y[500002];
int pow(int x,int y)
{
	int i;
	int p=1;
	for(i=1;i<=y;i++)
		p=p*x;
	return p;
}
int main()
{
freopen("algsort.in","r",stdin);
freopen("algsort.out","w",stdout);
a=x;
b=y;
scanf("%d",&n);
for(i=1;i<=n;i++)
{
	scanf("%d",&a[i]);
	if(a[i]>maxi) maxi=a[i];
}
for(i=1;i<=11;i++)
{
	memset(ap,0,sizeof(ap));
	imp=pow(10,i-1);
	if(imp>maxi) break;
	for(j=1;j<=n;j++)
		ap[(a[j]/imp)%10]++;
	p[0]=ap[0];
	for(j=1;j<=9;j++)
		p[j]=p[j-1]+ap[j];
	p[10]=1;
	for(j=1;j<=n;j++)
	{
		if((a[j]/imp)%10>=1)
		{
			b[p[(a[j]/imp)%10-1]+1]=a[j];
			p[(a[j]/imp)%10-1]++;
		}
		else
		{
			b[p[10]]=a[j];
			p[10]++;
		}
	}
	aux=b;
	b=a;
	a=aux;
}
for(i=1;i<=n;i++)
	printf("%d ",a[i]);
return 0;
}