Cod sursa(job #2611151)

Utilizator AlexnolifeAlexandru Ica Alexnolife Data 6 mai 2020 15:02:37
Problema Sortare prin comparare Scor 40
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.22 kb
#include <cstddef>
#include <cstdlib>
#include <fstream>
#include <iterator>
#include <utility>
#include <vector>

auto read_input() -> std::vector<int>
{
    std::ifstream f{ "algsort.in" };
    std::vector<int> result{};
    int count{ 0 };

    f >> count;

    result.reserve(static_cast<std::size_t>(count));

    for(int i = 0; i < count; ++i) {
        int num{ 0 };
        f >> num;
        result.push_back(num);
    }

    return result;
}

auto quicksort(std::vector<int>& v,
               std::size_t const start,
               std::size_t const end) -> void
{
    auto i = start;
    auto j = end;
    auto piv = v[start + (end - start) / 2];

    while(i <= j) {
        while(v[i] < piv) {
            ++i;
        }
        while(v[j] > piv) {
            --j;
        }

        if(i <= j) {
            std::swap(v[i], v[j]);
            ++i;
            --j;
        }
    }

    if(j > start) {
        quicksort(v, start, j);
    }
    if(end > i) {
        quicksort(v, i, end);
    }
}

auto main() noexcept -> int
{
    auto input = read_input();
    quicksort(input, 0, input.size() - 1);

    std::ofstream g{ "algsort.out" };

    for(int const elem : input) {
        g << elem << ' ';
    }

    return EXIT_SUCCESS;
}