Cod sursa(job #742921)

Utilizator mihai995mihai995 mihai995 Data 2 mai 2012 04:43:42
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1 kb
#include <fstream>
#include <vector>
#include <cmath>
using namespace std;

const int N = 500005, Size = 1 << 16;
int v[N], n;

vector<unsigned short int> upper[Size], lower[Size];

ifstream in("algsort.in");
ofstream out("algsort.out");

void radix(int v[], int n)
{
    int key = Size - 1;

    for (int i = 1 ; i <= n ; i++)
        lower[v[i] & key].push_back(v[i] >> 16);

    for (int i = 0 ; i < Size ; i++)
        for (vector<unsigned short int> :: iterator it = lower[i].begin() ; it != lower[i].end() ; it++)
            upper[*it].push_back(i);

    n = 0;

    for (int i = 0 ; i < Size ; i++)
        for (vector<unsigned short int> :: iterator it = upper[i].begin() ; it != upper[i].end() ; it++)
            v[++n] = ((int)i << 16) + (*it);
}

int main()
{
    int n;

    in >> n;

    for (int i = 1 ; i <= n ; i++)
        in >> v[i];

    radix(v, n);

    for (int i = 1 ; i <= n ; i++)
        out << v[i] << " ";

    out << "\n";

    return 0;
}