Mai intai trebuie sa te autentifici.
Cod sursa(job #1567521)
Utilizator | Data | 13 ianuarie 2016 14:15:59 | |
---|---|---|---|
Problema | Sortare prin comparare | Scor | 100 |
Compilator | cpp | Status | done |
Runda | Arhiva educationala | Marime | 0.96 kb |
#include <cstdio>
#include <random>
#include <ctime>
#define MaxN 5000000
using namespace std;
int v[MaxN];
static inline int getRandom(void) {
static mt19937 gen(time(0));
int x = gen();
return x < 0 ? -x : x;
}
void qSort(int st, int fn) {
int b = st, e = fn;
int pivot = v[getRandom() % (fn - st + 1) + st];
while (b < e) {
while (v[b] < pivot) {
b++;
}
while (v[e] > pivot) {
e--;
}
if (b <= e) {
swap(v[b++], v[e--]);
}
}
if (st < e) {
qSort(st, e);
}
if (b < fn) {
qSort(b, fn);
}
}
int main() {
freopen("algsort.in", "r", stdin);
freopen("algsort.out", "w", stdout);
int N;
scanf("%d", &N);
for (int i = 0; i < N; i++) {
scanf("%d", &v[i]);
}
fclose(stdin);
qSort(0, N - 1);
for (int i = 0; i < N; i++) {
printf("%d ", v[i]);
}
fclose(stdout);
return 0;
}