Cod sursa(job #2381566)

Utilizator dan.ghitaDan Ghita dan.ghita Data 17 martie 2019 00:38:11
Problema Sortare prin comparare Scor 80
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.13 kb
#include <bits/stdc++.h>
#include <unordered_map>

using namespace std;

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

int pivSwap(vector<int> &v, int left, int right)
{
    if (left >= right)
        return -1;

    int pivPos = left + (right - left) / 2;

    swap(v[right], v[pivPos]);

    int i = left, j = right - 1;
    while (i <= j)
    {
        int pivVal = v[right];
        if (v[i] > pivVal && v[j] < pivVal)
            swap(v[i], v[j]);
        else
        {
            if (v[i] <= pivVal)
                ++i;
            if (v[j] >= pivVal)
                --j;
        }
    }

    // put pivot in its place
    swap(v[i], v[right]);

    return i;
}


void qsort(vector<int> &v, int left, int right)
{
    int pivIndex = pivSwap(v, left, right);

    if(pivIndex != -1)
        qsort(v, left, pivIndex - 1),
        qsort(v, pivIndex + 1, right);
}


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

    f >> n;
    while (n--)
        f >> x,
        v.push_back(x);

    qsort(v, 0, v.size() - 1);

    for (auto x : v)
        g << x << ' ';

    return 0;
}