Cod sursa(job #1466711)

Utilizator mihaiadelinamihai adelina mihaiadelina Data 29 iulie 2015 23:27:18
Problema Sortare prin comparare Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.99 kb
#include <fstream>
using namespace std;

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

int x[500001], n;

/* se alege pivotul primul element din intervalul [p,u]
transforma vectorul a.i. intre pozitiile p si u
toate elementele mai mici decat pivotul se pun in fata.
toate elementele mai mari decat pivotul se pun in spate.*/
int poz(int p, int u) {
    int piv, aux;
    piv = x[(p + u) / 2];

    while (p < u) {
        if (x[p] > x[u]) {
            aux = x[p];
            x[p] = x[u];
            x[u] = aux;
        }
        if (x[p] == piv) {
            u--;
        }
        else {
            p++;
        }
    }
    return p;
}

void quicksort(int p, int u) {
    int k;
    if (p < u) {
        k = poz(p, u);
        quicksort(p, k - 1);
        quicksort(k + 1, u);
    }
}

int main() {
    int i;
    fin >> n;

    for (i = 1; i <= n; i++) {
        fin >> x[i];
    }
    quicksort(1, n);

    for (i = 1; i <= n; i++) {
        fout << x[i] << " ";
    }
    return 0;
}