Cod sursa(job #476467)

Utilizator mihai995mihai995 mihai995 Data 11 august 2010 08:51:26
Problema Sortare prin comparare Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.83 kb
#include <fstream>
using namespace std;

int v[1<<19],d[1<<19],n,zece[10],a[10],b[10];

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

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

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

int main()
{
	int i;
	bool ok=true;
	in>>n;
	zece[1]=1;
	for (i=2;i<10;i++)
		zece[i]=zece[i-1]*10;
	for (i=1;i<=n;i++)
	{
		in>>v[i];
		if (v[i]<v[i-1])
			ok=false;
	}
	if (!ok)
		radix(9,1,n);
	for (i=1;i<=n;i++)
		out<<v[i]<<" ";
	out<<"\n";
	return 0;
}