Cod sursa(job #1060152)

Utilizator DanielSanduSandu Daniel DanielSandu Data 17 decembrie 2013 18:02:00
Problema Sortare prin comparare Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 1.09 kb
#include <fstream>
#include <vector>
#include <math.h>

const size_t inf = -1;

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

template<typename T> void sortBatog(std::vector<T>& a) {
    std::vector<size_t> batog;
    size_t i, pos, s = sqrt(a.size());
    batog.reserve(s + 1);
    for (i = 0; i < a.size(); ++i)
        if (i / s < batog.size()) {
            if (a[batog[i / s]] > a[i])
                batog[i / s] = i;
        }
        else
            batog.push_back(i);
    while(true) {
        pos = 0;
        for (i = 1; i < batog.size(); ++i)
            if (a[batog[pos]] > a[batog[i]])
                pos = i;
        if (a[batog[pos]] == inf)
            break;
        out<<a[batog[pos]]<<" ";
        a[batog[pos]] = inf;
        for (i = pos * s; i < pos * s + s && i < a.size(); ++i)
            if (a[batog[pos]] > a[i])
                batog[pos] = i;
    }
}

int main() {
    std::vector<size_t> v;
    size_t n, x;
    in>>n;
    v.reserve(n);
    while(in>>x)
        v.push_back(x);
    sortBatog(v);
    return 0;
}