Cod sursa(job #659136)

Utilizator mihaibogdan10Mihai Bogdan mihaibogdan10 Data 10 ianuarie 2012 10:23:17
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.9 kb
#include<cstdio>
#include<list>
#define MOD 1000
using namespace std;

list<int> frec[MOD], frec2[MOD], sorted;

void MakeBucket(long long startingDigit, list<int> oldBucket[MOD], list<int> newBucket[MOD]){
	int i, x;
	for(i = 0; i < MOD; i++)
		while (!oldBucket[i].empty()){
			x = oldBucket[i].front();
			oldBucket[i].pop_front();
			if (x / startingDigit == 0) sorted.push_back(x);
			else newBucket[(x / startingDigit) % MOD].push_back(x);
		}
}

int main(){
	freopen("algsort.in", "r", stdin), freopen("algsort.out", "w", stdout);
	int N, i, x;
	scanf("%d", &N);
	for (i = 0; i < N; i++){
		scanf("%d", &x);
		frec[x % MOD].push_back(x);
	}
	
	MakeBucket(1000, frec, frec2);
	MakeBucket(1000000, frec2, frec);
	MakeBucket(1000000000, frec, frec2);
	MakeBucket(1000000000000ll, frec2, frec);
	
	while(!sorted.empty())
		printf("%d ", sorted.front()), sorted.pop_front();
	return 0;
}