Pagini recente » Cod sursa (job #1374209) | Cod sursa (job #3217997) | Cod sursa (job #662951) | Cod sursa (job #2959121) | Cod sursa (job #826751)
Cod sursa(job #826751)
#include <fstream>
#include <cstdio>
#include <cstring>
using namespace std;
const char InFile[]="algsort.in";
const char OutFile[]="algsort.out";
const int MaxN=500111;
const int LogRadix=16;
const int Steps=32/LogRadix;
const int Radix=1<<LogRadix;
const int MASK=Radix-1;
ifstream fin(InFile);
FILE *fout=fopen(OutFile,"w");
int N,V[MaxN],Buffer[MaxN],F[Radix];
int main()
{
fin>>N;
for(register int i=1;i<=N;++i)
{
fin>>V[i];
}
fin.close();
for(register int i=1;i<=N;++i)
{
++F[V[i]&MASK];
}
for(register int i=1;i<Radix;++i)
{
F[i]+=F[i-1];
}
for(register int i=N;i>0;--i)
{
Buffer[F[V[i]&MASK]--]=V[i];
}
memset(F,0,sizeof(F));
memcpy(V,Buffer,sizeof(int)*(N+2));
for(register int i=1;i<=N;++i)
{
++F[(V[i]>>LogRadix)&MASK];
}
for(register int i=1;i<Radix;++i)
{
F[i]+=F[i-1];
}
for(register int i=N;i>0;--i)
{
Buffer[F[(V[i]>>LogRadix)&MASK]--]=V[i];
}
for(register int i=1;i<=N;++i)
{
fprintf(fout,"%d ",Buffer[i]);
}
fclose(fout);
return 0;
}