Cod sursa(job #2381571)

Utilizator dan.ghitaDan Ghita dan.ghita Data 17 martie 2019 02:15:27
Problema Sortare prin comparare Scor 60
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.22 kb
#include <bits/stdc++.h>
#include <unordered_map>

using namespace std;

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

int choosePiv(vector<int> &v, int left, int right)
{
    return left + rand() % (right - left + 1);
}

int pivSwap(vector<int> &v, int left, int right)
{
    int pivPos = choosePiv(v, left, right);

    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)
{
    if (left >= right)
        return;

    int pivIndex = pivSwap(v, left, right);
    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);

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

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

    return 0;
}