Cod sursa(job #240591)

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

char ax[dim];
int pz;

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;
	}
}

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);
	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)printf("%d ", a[i]);
	return 0;
}