Cod sursa(job #658940)

Utilizator andumMorie Daniel Alexandru andum Data 9 ianuarie 2012 20:22:50
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.63 kb
#include <fstream>
#include <queue>

using namespace std;

int v[500005],n,maxim;
queue <int> buckets[1<<8];

void RadixSort()
{
	int i,j,x,k;
	for(i=0;maxim;maxim>>=8,i+=8)
	{
		for(j=1;j<=n;++j)
		{
			x=(v[j]>>i)&255;
			buckets[x].push(v[j]);
		}
		k=0;
		for(j=0;j<=255;++j)
		{
			while( !buckets[j].empty() )
			{
				v[++k]=buckets[j].front();
				buckets[j].pop();
			}
		}
	}
}

int main()
{	
	ifstream f("algsort.in");
	ofstream g("algsort.out");
	int i;
	f>>n;
	for(i=1;i<=n;++i)
	{
		f>>v[i];
		if(v[i]>maxim)	maxim=v[i];
	}
	RadixSort();
	for(i=1;i<=n;++i)
		g<<v[i]<<" ";
	return 0;
}