Cod sursa(job #826727)

Utilizator ChallengeMurtaza Alexandru Challenge Data 1 decembrie 2012 10:21:35
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.93 kb
#include <fstream>
#include <cstring>

using namespace std;

const char InFile[]="algsort.in";
const char OutFile[]="algsort.out";
const int MaxN=500111;
const int LogRadix=16;
const int Steps=32/LogRadix;
const int Radix=1<<LogRadix;

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

int N,V[MaxN],Buffer[MaxN],F[Radix];

int main()
{
	fin>>N;
	for(register int i=1;i<=N;++i)
	{
		fin>>V[i];
	}
	fin.close();
	
	int mask=Radix-1;
	int p=0;
	for(register int step=1;step<=Steps;++step)
	{
		for(register int i=1;i<=N;++i)
		{
			++F[(V[i]&mask)>>p];
		}
		for(register int i=1;i<Radix;++i)
		{
			F[i]+=F[i-1];
		}
		for(register int i=N;i>0;--i)
		{
			Buffer[F[(V[i]&mask)>>p]--]=V[i];
		}
		memset(F,0,sizeof(F));
		for(register int i=1;i<=N;++i)
		{
			V[i]=Buffer[i];
		}
		p+=LogRadix;
		mask<<=LogRadix;
	}
	
	for(register int i=1;i<=N;++i)
	{
		fout<<V[i]<<" ";
	}
	fout.close();
	return 0;
}