Cod sursa(job #2058221)

Utilizator BrandonChris Luntraru Brandon Data 5 noiembrie 2017 12:22:37
Problema Sortare prin comparare Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 1.2 kb
#include <fstream>
#include <cstdlib>
#include <ctime>

using namespace std;

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

const int MaxN = 500005;

int Partition(int currV[], int pivVal, int lf, int rg) {
    int loPos = lf - 1;
    for (int i = lf; i <= rg - 1; ++i) {
        if (currV[i] <= pivVal) {
            ++loPos;
            swap(currV[i], currV[loPos]);
        }
    }

    //all elements <= pivVal are between 1 and loPos, so the rightful position of pivVal is loPos;
    ++loPos;
    swap(currV[rg], currV[loPos]);

    return loPos;
}

void QSort(int currV[], int lf, int rg) {
    if (lf >= rg) {
        return;
    }

    int pivPos = lf + rand() % (rg - lf + 1);
    int pivVal = currV[pivPos];
    swap(currV[pivPos], currV[rg]); //pivot becomes last element

    int partPos = Partition(currV, pivVal, lf, rg);
    QSort(currV, lf, partPos - 1);
    QSort(currV, partPos + 1, rg);
}

int v[MaxN];

int main() {
    srand(time(0));

    int n;
    cin >> n;
    for (int  i = 1; i <= n; ++i) {
        cin >> v[i];
    }

    QSort(v, 1, n);

    for (int i = 1; i <= n; ++i) {
        cout << v[i] << ' ';
    }
    return 0;
}