Cod sursa(job #1785533)

Utilizator BLz0rDospra Cristian BLz0r Data 21 octombrie 2016 15:18:54
Problema Sortare prin comparare Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 1.01 kb
/* Sortare folosita: QSort */
#include <fstream>
#include <algorithm>
using namespace std;

#define Nmax 500002

ifstream fin("algsort.in");
ofstream fout("algsort.out");

int v[Nmax];

int Partitionare(int st, int dr) {

    int pivot = v[dr];

    int left = st, right = dr - 1;
    while (left <= right) {

        while (v[left] < pivot)
            left++;

        while (v[right] >= pivot)
            right--;

        if (left <= right) {
            swap(v[left], v[right]);
            left++;
            right--;
        }
    }
    swap(v[left], v[dr]);

    return left;
}

void QSort(int st, int dr) {

    if (st >= dr)
        return;

    int poz = Partitionare(st, dr);

    QSort(st, poz - 1);
    QSort(poz + 1, dr);
};

int main() {

    int N;

    fin >> N;
    for (int i = 1; i <= N; ++i)
        fin >> v[i];

    random_shuffle(v + 1, v + N + 1);

    QSort(1, N);

    for (int i = 1; i <= N; ++i)
        fout << v[i] << " ";

    return 0;
}