Cod sursa(job #793920)

Utilizator Stefex09Stefan Teodorescu Stefex09 Data 4 octombrie 2012 18:30:39
Problema Sortare prin comparare Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 0.83 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;
	
	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 ++)
		Sum[i] = Sum[i - 1] + Cnt[i - 1];
	
	for (i = 0; i < N; i ++)
		B[ Sum[ (A[i] >> bit) & mask ] ++ ] = 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;
}