Cod sursa(job #390323)

Utilizator sealTudose Vlad seal Data 3 februarie 2010 15:08:36
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.67 kb
#include<cstdio>
#include<cstring>
#define NMAX 500000
using namespace std;
int A[NMAX],B[NMAX],n;

void sort(int A[], int B[], int shift)
{
	int Cnt[1<<16],Poz[1<<16],i;

	memset(Cnt,0,sizeof(int)*(1<<16));
	for(i=0;i<n;++i)
		++Cnt[(A[i]>>shift)&((1<<16)-1)];

	Poz[0]=0;
	for(i=1;i<1<<16;++i)
		Poz[i]=Poz[i-1]+Cnt[i-1];

	for(i=0;i<n;++i)
		B[Poz[(A[i]>>shift)&((1<<16)-1)]++]=A[i];
}

int main()
{
	int i;

	freopen("algsort.in","r",stdin);
	freopen("algsort.out","w",stdout);

	scanf("%d",&n);
	for(i=0;i<n;++i)
		scanf("%d",A+i);

	sort(A,B,0);
	sort(B,A,16);

	for(i=0;i<n-1;++i)
		printf("%d ",A[i]);
	printf("%d\n",A[i]);

	return 0;
}