Cod sursa(job #551677)

Utilizator ChallengeMurtaza Alexandru Challenge Data 10 martie 2011 22:51:19
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.8 kb
#include <fstream>

using namespace std;

const char InFile[]="algsort.in";
const char OutFile[]="algsort.out";
const int MaxN=500111;

ifstream fin(InFile);
ofstream fout(OutFile);

int n,v[MaxN],buffer[MaxN],L,dr2,i;

void radix_sort(int st, int dr)
{
	if(st>=dr)
	{
		return;
	}
	if(L<0)
	{
		return;
	}
	int st2=st-1;
	dr2=dr;
	for(i=st;i<=dr;++i)
	{
		if(((v[i]>>L)&1)==0)
		{
			buffer[++st2]=v[i];
		}
		else
		{
			buffer[dr2--]=v[i];
		}
	}
	for(i=st;i<=dr;++i)
	{
		v[i]=buffer[i];
	}
	--L;
	radix_sort(st,st2);
	radix_sort(st2+1,dr);
	++L;
}

int main()
{
	fin>>n;
	for(register int i=1;i<=n;++i)
	{
		fin>>v[i];
	}
	fin.close();

	L=30;
	radix_sort(1,n);

	for(register int i=1;i<=n;++i)
	{
		fout<<v[i]<<" ";
	}
	fout.close();
	return 0;
}