Cod sursa(job #459652)

Utilizator GotenAmza Catalin Goten Data 30 mai 2010 16:05:12
Problema Sortare prin comparare Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 0.87 kb
#include<fstream>
#define bit_number 6
#define length (1<<bit_number)-1
#define data_type int
#define max_n 500000
using namespace std;
int n,
	a[max_n],b[max_n];
void radix(int bit, int S[], int D[])
{
	int i,index[length+1],count[length+1];
	for(i=0;i<=length;++i)
		count[i]=0;
	for(i=1;i<=n;++i)
		count[(S[i]>>(bit*bit_number))&length]++;
	index[0]=1;
	for(i=1;i<=length;++i)
		index[i]=index[i-1]+count[i-1];
	for(i=1;i<=n;i++)
		D[index[(S[i]>>(bit*bit_number))&length]++]=S[i];		
}
void gotta_sort_em_all()
{
	for(int i=0;i<sizeof(data_type)*8/bit_number;++i)
	{
		if(i%2)
			radix(i,b,a);
		else
			radix(i,a,b);
	}
}	
int main()
{
	ifstream read ("algsort.in");
	ofstream write ("algsort.out");
	read>>n;
	int i;
	for(i=1;i<=n;++i)
		read>>a[i];
	gotta_sort_em_all();
	for(i=1;i<=n;i++)
		write<<a[i]<<' ';
	write<<'\n';
	return 0;
}