Cod sursa(job #1013089)

Utilizator ELHoriaHoria Cretescu ELHoria Data 20 octombrie 2013 11:34:34
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.79 kb
#include <cstdio>
#include <vector>

using namespace std;

const int nmax = int(5e5), base = 16;
int n;
int a[nmax];
vector<int> bucket[base];

void LSDRadixSort() {
	for(int k = 0;k < 8;k++) {
		for(int i = 0;i < n;i++) {
			bucket[a[i]>>(4*k) & 15].push_back(a[i]);
		}

		for(int digit = 0, i = 0;digit < base;digit++) {
			for(const auto& number : bucket[digit]) {
				a[i++] = number;
			}
			bucket[digit].clear();
		}
	}
}

void readData() {
	scanf("%d",&n);
	 for(int i = 0;i < n;i++) {
		 scanf("%d",&a[i]);
	 }
}

void printData() {
	for(int i = 0;i < n;i++) {
		printf("%d ",a[i]);
	}
	printf("\n");
}


int main()
{
	freopen("algsort.in","r",stdin);
	freopen("algsort.out","w",stdout);
	readData();
	LSDRadixSort();
	printData();
	return 0;
}