Cod sursa(job #2291468)

Utilizator ifrimencoAlexandru Ifrimenco ifrimenco Data 28 noiembrie 2018 02:20:33
Problema Sortare prin comparare Scor 60
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.04 kb
#include <fstream>
#include <cstdlib>

using namespace std;
int v[500005], n;

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

int alegere_pivot(int st, int dr) {
    int random = st + rand() % (dr - st);
    //cout << random << " ";
    return random;
}

int partitie (int st, int dr) {
    //cout << v[dr] << ": ";
    int pivot = v[dr];
    int i = st, j = dr - 1;
    while (i <= j) {
        if (v[i] >= pivot && v[j] < pivot) swap(v[i], v[j]);
        if (v[i] < pivot) i++;
        if (v[j] >= pivot) j--;
    }
    swap(v[i], v[dr]);
    //for (int i = 0; i < n; ++i) cout << v[i] << " ";
    //cout << "\n";
    return i;
}

void qsort(int st, int dr) {
    if (st >= dr) return;
    int pivot = alegere_pivot(st, dr);
    swap(v[pivot], v[dr]);
    int poz = partitie(st, dr);
    qsort(st, poz - 1);
    qsort(poz + 1, dr);
}

int main()
{
    int i;
    fin >> n;
    for (i = 0; i < n; ++i) fin >> v[i];
    qsort(0, n - 1);
    for (i = 0; i < n; ++i) fout << v[i] << " ";
    return 0;
}