Pagini recente » Cod sursa (job #825338) | Cod sursa (job #2539532) | Cod sursa (job #1113088) | Cod sursa (job #3154608) | Cod sursa (job #1466724)
#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;
}