Mai intai trebuie sa te autentifici.
Cod sursa(job #1105184)
Utilizator | Data | 11 februarie 2014 16:05:31 | |
---|---|---|---|
Problema | Sortare prin comparare | Scor | 100 |
Compilator | cpp | Status | done |
Runda | Arhiva educationala | Marime | 0.83 kb |
#include<cstdio>
#include<cstring>
using namespace std;
const int NMAX = 500005;
const int MASK = (1<<8)-1;
int N,A,B,C,V[NMAX],W[NMAX],i,j,k,shift,Buckets[MASK+5];
int main()
{
freopen("algsort.in","r",stdin);
freopen("algsort.out","w",stdout);
scanf("%d",&N);
for(i=1;i<=N;i++)
scanf("%d",&V[i]);
for(i=0,shift=0;i<4;i++,shift+=8)
{
for(j=1;j<=N;j++)
{
k=(V[j]>>shift)&MASK;
Buckets[k]++;
}
for(j=1;j<=MASK;j++)
Buckets[j]+=Buckets[j-1];
for(j=N;j;j--)
{
k=(V[j]>>shift)&MASK;
W[Buckets[k]]=V[j];
Buckets[k]--;
}
memcpy(V,W,(N+1)*sizeof(int));
for(j=0;j<=MASK;j++) Buckets[j]=0;
}
for(i=1;i<=N;i++) printf("%d ",V[i]);
return 0;
}