Pagini recente » Cod sursa (job #2472905) | Cod sursa (job #380704) | Cod sursa (job #2552704) | Cod sursa (job #1967189) | Cod sursa (job #390323)
Cod sursa(job #390323)
#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;
}