Cod sursa(job #583006)

Utilizator space.foldingAdrian Soucup space.folding Data 17 aprilie 2011 11:35:37
Problema Sortare prin comparare Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.97 kb
#include <iostream>
#include <algorithm>
#include <list>
using namespace std;
union Element
{
	int x;
	unsigned char c[4];
};

list<Element> elements;
list<Element> buckets[256];

void sort_bucket(list <Element> &elist, int radix)
{
	for(int i=0; i<256; ++i)
		buckets[i].clear();

	while(!elist.empty())
	{
		buckets[elist.front().c[radix]].push_back(elist.front());
		elist.pop_front();
	}
	for(int i=0; i<256; ++i)
		elist.splice(elist.end(), buckets[i]);
	
}

void sort_radix(list<Element> &elist, int n)
{
	int radix;
	for(radix=0; radix<4; ++radix)
		sort_bucket(elist, radix);
}


int main ()
{
	int n;
	cin>>n;
	freopen("algsort.in", "r", stdin);
	freopen("algsort.out", "w", stdout);
	
	Element current;
	for(int i=0; i<n; ++i)
	{
		cin>>current.x;
		elements.push_back(current);
	}

	sort_radix(elements, n);

	
	for(list<Element>::iterator it=elements.begin(); it!=elements.end(); ++it)
		cout<<it->x<<" ";
	
	
	return 0;
}