Cod sursa(job #742918)

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

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

vector<int> upper[N], lower[N];

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]);

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

    n = 0;

    for (int i = 0 ; i < Size ; i++)
        for (vector<int> :: iterator it = upper[i].begin() ; it != upper[i].end() ; it++)
            v[++n] = *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;
}