Cod sursa(job #663219)

Utilizator JohannesJohannes Dragulanescu Johannes Data 18 ianuarie 2012 00:15:23
Problema Sortare prin comparare Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.73 kb
//radix sort

#include <fstream>
#include <queue>

using namespace std;

#define Nmax 500001
#define biti 8

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

queue <int> buck[256];

int arr[Nmax], n, max;

void radix();

int main()
{
	int i;
	f>>n;
	for(i=1; i<=n; ++i)
    {
		f>>arr[i];
		if(arr[i]>max) 
			max=arr[i];
	}
	radix();
	for(i=1; i<=n; ++i) 
		g<<arr[i]<<" ";
	
	return 0;
}

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