Cod sursa(job #2272341)

Utilizator xtreme77Patrick Sava xtreme77 Data 30 octombrie 2018 02:00:26
Problema Sortare prin comparare Scor 40
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.1 kb
#include <fstream>
#include <algorithm>

using namespace std;

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

const int MAX = static_cast<const int>(5e5 + 14);

int v [MAX];

int getPivot (int st, int dr)
{
    random_shuffle (v + st, v + dr + 1);
    int fi = st;
    int target = v [fi];
    st ++;
    while (1)
    {
        while (st <= dr and v[st] <= target)
            st += 1;
        while (dr >= st and v[dr] >= target)
            dr -= 1;

        if (st <= dr)
        {
            swap (v[st], v [dr]);
        }
        else break;
    }
    swap(v [fi], v [dr]);
    return dr;
}

void quickSort (int st, int dr)
{
    if (st >= dr)
        return;

    auto pi = getPivot (st, dr);

    /*cout << "st : " << st << "  dr : " << dr << '\n';
    for (int i = st; i <= dr; ++ i)
        cout << v [i] << ' ';
    cout << '\n';*/

    quickSort(st, pi - 1);
    quickSort(pi + 1, dr);
}

int main() {
    int n;
    cin >> n;
    for (int i = 1; i <= n; ++ i)
        cin >> v [i];
    quickSort(1, n);
    for (int i = 1; i <= n; ++ i)
        cout << v [i] << ' ';
    cout << '\n';
    return 0;
}