Cod sursa(job #742916)

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

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

void radix(vector<int>& v)
{
    if (v.size() < 2)
        return;

    int step, st = v.back(), dr = v.back();

    for (vector<int> :: iterator it = v.begin() ; it != v.end() ; it++)
    {
        st = min(st, *it);
        dr = max(dr, *it);
    }

    if (st == dr)
        return;

    step = sqrt(dr - st);
    vector<int> lista[step + 1];

    for (vector<int> :: iterator it = v.begin() ; it != v.end() ; it++)
        lista[((*it) - st) / step].push_back(*it);

    v.clear();

    for (int i = 0 ; i <= step ; i++)
    {
        radix(lista[i]);

        for (vector<int> :: iterator it = lista[i].begin() ; it != lista[i].end() ; it++)
            v.push_back(*it);
    }
}

int main()
{
    int n, x;
    vector<int> v;

    in >> n;

    while (n--)
    {
        in >> x;
        v.push_back(x);
    }

    radix(v);

    for (vector<int> :: iterator it = v.begin() ; it != v.end() ; it++)
        out << (*it) << " ";

    out << "\n";

    return 0;
}