Cod sursa(job #1115918)

Utilizator iordache.bogdanIordache Ioan-Bogdan iordache.bogdan Data 22 februarie 2014 10:35:09
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.11 kb
#include <fstream>
#include <cstring>
 
using namespace std;
 
const char InFile[]="algsort.in";
const char OutFile[]="algsort.out";
const int MaxN=10111000;
const int LogRadix=8;
const int Steps=32/LogRadix;
const int Radix=1<<LogRadix;
 
ifstream fin(InFile);
ofstream fout(OutFile);
 
int N,A,B,C,V[MaxN],Buffer[MaxN],F[Radix];
 
int main()
{
    fin>>N;
 

    for(register int i=1;i<=N;++i)
    {
        fin>>V[i];
    }
 
    int mask=Radix-1;
    int p=0;
    for(register int step=1;step<=Steps;++step)
    {
        for(register int i=1;i<=N;++i)
        {
            ++F[(V[i]&mask)>>p];
        }
        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)>>p]--]=V[i];
        }
        memset(F,0,sizeof(F));
        for(register int i=1;i<=N;++i)
        {
            V[i]=Buffer[i];
        }
        p+=LogRadix;
        mask<<=LogRadix;
    }
 
    for(register int i=1;i<=N;i++)
    {
        fout<<V[i]<<" ";
    }
    fout.close();
    return 0;
}