Cod sursa(job #491179)

Utilizator mihai995mihai995 mihai995 Data 10 octombrie 2010 17:31:50
Problema Sortare prin comparare Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 0.81 kb
#include <fstream>
using namespace std;

int v[1<<19],aux[1<<19],zece[1<<4],a[1<<4],n;

ifstream in("algsort.in");
ofstream out("algsort.out");

inline int cif(int x,int n)
{
	return x/zece[n]%10;
}

void radix(int x,int y,int p)
{
	int i,b[1<<4];
	for (i=0;i<10;i++)
		a[i]=0;
	a[0]=b[0]=x;
	b[10]=y-x+1;
	for (i=x;i<y;i++)
		a[cif(v[i],p)+1]++;
	for (i=1;i<10;i++)
	{
		a[i]+=a[i-1];
		b[i]=a[i];
	}
	for (i=x;i<y;i++)
		aux[a[cif(v[i],p)]++]=v[i];
	for (i=x;i<y;i++)
		v[i]=aux[i];
	if (p==1)
		return;
	for (i=0;i<10;i++)
		if (b[i+1]-b[i]>1)
			radix(b[i],b[i+1],p-1);
}

int main()
{
	int i;
	zece[1]=1;
	for (i=2;i<11;i++)
		zece[i]=zece[i-1]*10;
	in>>n;
	for (i=1;i<=n;i++)
		in>>v[i];
	radix(1,n+1,10);
	for (i=1;i<=n;i++)
		out<<v[i]<<"\n";
	out<<"\n";
	return 0;
}