Cod sursa(job #793925)

Utilizator Stefex09Stefan Teodorescu Stefex09 Data 4 octombrie 2012 18:36:13
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.88 kb
#include <iostream>
#include <fstream>

using namespace std;

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

const int MAXN = 500010;
const int mask = (1 << 16) - 1;

int N;
int A[MAXN], B[MAXN];
int Cnt[1 << 16];
int Sum[1 << 16];

void radix (int *A, int *B, const int bit)
{
	int i, x, a = 0;
	
	for (i = 0; i <= mask; i ++)
		Cnt[i] = 0;
	
	for (i = 0; i < N; i ++)
		++ Cnt[ (A[i] >> bit) & mask ];

	for (i = 1; i <= mask; i ++)
		Cnt[i] += Cnt[i - 1];
	
	for (i = 0; i < N; i ++){
		x = (A[i] >> bit) & mask;
		
		if (!x)
			B[ a ++ ] = A[i];
		else
			B[ Cnt[x - 1] ++ ] = A[i];
	}
}

void radix_sort ()
{
	radix (A, B, 0);
	radix (B, A, 16);
	//radix (A, B, 32);
}

int main ()
{
	int i;
	
	in >> N;
	
	for (i = 0; i < N; i ++)
		in >> A[i];
	
	radix_sort ();
	
	for (i = 0; i < N; i ++)
		out << A[i] << " ";
	
	return 0;
}