Pagini recente » Cod sursa (job #1143436) | Cod sursa (job #2611029) | Cod sursa (job #253131) | Cod sursa (job #2160824) | Cod sursa (job #1431070)
#include<iostream>
#include<fstream>
#include<vector>
#include<stdlib.h>
using namespace std;
int partition(vector<int> &v, int lower, int upper) {
int i;
// Alege pivot random
srand((unsigned) time(NULL));
double r = (double) rand() / RAND_MAX;
int p = lower + r * (upper - lower);
// Il pune pe ultima pozitie pentru a fi mai usor de gestionat
swap(v[upper], v[p]);
p = v[upper], i = lower;
for (int j = lower; j <= upper - 1; j++) {
if (v[j] <= p) {
swap(v[i], v[j]);
i++;
}
}
swap(v[i], v[upper]);
return i;
}
void qsort(vector<int> &v, int lower, int upper) {
int index = partition(v, lower, upper);
if (lower < index) {
qsort(v, lower, index - 1);
}
if (upper > index) {
qsort(v, index + 1, upper);
}
}
int main() {
freopen("input.in", "r", stdin);
freopen("output.out", "w", stdout);
int n;
cin >> n;
vector<int> v;
v.reserve(n);
for (int i = 0; i < n; ++i) {
cin >> v[i];
}
qsort(v, 0, n);
for (int i = 0; i < n; ++i) {
cout << v[i] << " ";
}
fclose(stdin);
fclose(stdout);
return 0;
}