Cod sursa(job #1167019)

Utilizator AlexandruValeanuAlexandru Valeanu AlexandruValeanu Data 4 aprilie 2014 10:58:51
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.05 kb
#include <iostream>
#include <cstring>
#include <vector>
#include <fstream>
#include <algorithm>

using namespace std;

const int digits = 2;
const int r = 16;
const int radix = 1 << r;
const int mask = radix - 1;

const int Nmax = 500002;

int a[Nmax];
int b[Nmax];
int bucket[radix];
int N;

int main()
{
    ifstream f("algsort.in");
    ofstream g("algsort.out");

    f >> N;

    for ( int i = 0; i < N; ++i )
            f >> a[i];

    for ( int i = 0, shift; i < digits; i++, shift += r )
    {
        for ( int j = 0; j < radix; ++j )
                bucket[j] = 0;

        for ( int j = 0; j < N; ++j )
                ++bucket[ ( a[j] >> shift ) & mask ];

        for ( int j = 1; j < radix; ++j )
                bucket[j] += bucket[j - 1];

        for ( int j = N - 1; j >= 0; j-- )
                b[ --bucket[ ( a[j] >> shift ) & mask ] ] = a[j];

        for ( int j = 0; j < N; ++j )
                a[j] = b[j];
    }

    for ( int i = 0; i < N; ++i )
            g << a[i] << " ";

    return 0;
}