Cod sursa(job #240608)

Utilizator blasterzMircea Dima blasterz Data 8 ianuarie 2009 00:35:04
Problema Sortare prin comparare Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 1.47 kb
using namespace std;
#include <cstdio>
#include <cstdlib>
#include <ctime>
#include <string>
#include <fstream>
#include <algorithm>
#define N 500001
#define dim 8192

char ax[dim];
int pz;

char bx[dim];
int pz2;

inline void cit(int &x)
{
	x=0;
	while(ax[pz]<'0' || ax[pz]>'9')
		if(++pz==dim)fread(ax,1,dim,stdin),pz=0;
	while(ax[pz]>='0' && ax[pz]<='9')
	{
		x=x*10+ax[pz]-'0';
		if(++pz==dim)fread(ax,1,dim,stdin),pz=0;
	}
}


inline void afis(int x)
{
	//printf("%d ", x);
	int t=0;
	while(x) t=t*10+x%10, x/=10;

//	printf("%d\n", t);
	
	while(t) 
	{
		bx[pz2]=t%10 + '0';
		t/=10;
		if(++pz2 == dim) fwrite(bx, 1, dim, stdout),pz2=0;
	}
	
	bx[pz2]=' ';
	if(++pz2 == dim) fwrite(bx,1,dim,stdout),pz2=0;
	
}

int a[N], b[N];

inline void rad(int n, int byte, int a[], int b[])
{
	int cnt[256], ind[256],i;
	memset(cnt, 0, sizeof(cnt));
	for(i=1; i <= n; ++i) ++cnt[(a[i]>>byte)&255];
	ind[0]=1;
	for(i=1; i < 256; ++i) ind[i]=ind[i-1]+cnt[i-1];
	for(i=1; i <= n; ++i) b[ind[(a[i]>>byte)&255]++]=a[i];
}

inline void radix(int a[], int n)
{
	rad(n, 0, a, b);
	rad(n, 8, b, a);
	rad(n, 16, a, b);
	rad(n, 24, b, a);
}

int main()
{
	freopen("algsort.in","r",stdin);
	freopen("algsort.out","w",stdout);
	//ofstream g("algsort.out");
	int n,i;
	cit(n);
	for(i=1;i<=n;++i) cit(a[i]);
	
	radix(a,n);
	//sort(a+1,a+n+1);
	for(i=1;i<=n;++i) afis(a[i]);//printf("%d ", a[i]);
	if(pz2)fwrite(bx, 1, pz2-1, stdout);
	return 0;
}