Cod sursa(job #659155)

Utilizator paul24090FMI - Balauru Paul paul24090 Data 10 ianuarie 2012 11:45:52
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.97 kb
#include <cstdio>
#include <queue>

using namespace std;

queue<int> coada[1000],coada2[1000],sortat;
int n;

void updateBuckets(int pow10, queue<int> coadaVeche[], queue<int> coadaNoua[])
{
	int x;
	for(int i=0;i<1000;i++)
	{
		while(!coadaVeche[i].empty())
		{
			x = coadaVeche[i].front();
			coadaVeche[i].pop();
			if(x/pow10 == 0)
				sortat.push(x);
			else
				coadaNoua[(x/pow10)%1000].push(x);			
		}
	}
}

int main()
{
	freopen("algsort.in","r",stdin);
	freopen("algsort.out","w",stdout);
	
	int x;
	
	scanf("%d",&n);
	for(int i=1;i<=n;i++)
	{
		scanf("%d",&x);
		coada[x%1000].push(x);
	}
	
	updateBuckets(1000,coada,coada2);
	updateBuckets(1000000,coada2,coada);
	updateBuckets(1000000000,coada,coada2);
	
	while(!sortat.empty())
	{
		printf("%d ",sortat.front());
		sortat.pop();
	}
	for(int i=0;i<=2;i++)
	{
		while(!coada2[i].empty())
		{
			printf("%d ",coada2[i].front());
			coada2[i].pop();
		}
	}
	
	return 0;
}