Cod sursa(job #1466724)

Utilizator mihaiadelinamihai adelina mihaiadelina Data 29 iulie 2015 23:56:06
Problema Sortare prin comparare Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 1.1 kb
#include <fstream>
#include <iostream>
using namespace std;

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

int x[500001], n;

void interschimbare (int &a, int &b) {
    int aux;
    aux = a;
    a = b;
    b = aux;
}

/* 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;
    piv = x[(p + u) / 2];

    interschimbare(x[p], x[(p + u) / 2]);

    while (p < u) {
        if (x[p] > x[u]) {
            interschimbare(x[p], x[u]);
        }
        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;
}