Cod sursa(job #662156)

Utilizator yamahaFMI Maria Stoica yamaha Data 15 ianuarie 2012 23:08:05
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.73 kb
#include <fstream>
#include <queue>

using namespace std;

#define Nmax 500001
#define biti 8

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

queue <int> bucket[256];

int v[Nmax], n, maximus;

void radix_sort();

int main()
{
	int i;
	f>>n;
	for(i=1; i<=n; ++i)
    {
		f>>v[i];
		if(v[i]>maximus) maximus=v[i];
	}
	radix_sort();
	for(i=1; i<=n; ++i) g<<v[i]<<" ";
	
	return 0;
}

void radix_sort()
{
	int i, j, p, aux;
	for(i=0; maximus; maximus>>=biti,i+=biti)
    {
		for(j=1; j<=n; ++j)
        {
			p=((v[j]>>i)&255);
			bucket[p].push(v[j]);
		}
		aux=0;
		for(j=0; j<=255; ++j)
			while(!bucket[j].empty())
            {
				v[++aux]=bucket[j].front();
				bucket[j].pop();
			}
	}
}