Pagini recente » Cod sursa (job #692903) | Cod sursa (job #2886881) | Cod sursa (job #3182262) | Cod sursa (job #568280) | Cod sursa (job #765747)
Cod sursa(job #765747)
#include <stdio.h>
#include <fstream>
#include <cstdlib>
using namespace std;
int v[500001];
int n;
void read_() {
ifstream in("algsort.in");
in >> n;
for (int i = 0; i < n; i++) {
in >> v[i];
}
in.close();
}
void sw(int* a, int* b) {
int aux = *a;
*a = *b;
*b = aux;
}
int pivot(int a, int b) {
return a + (rand() % (b - a));
}
void printf_v() {
for (int i = 0; i < n; i++) {
printf("%d ", v[i]);
}
printf("\n");
}
void qSort_(int a, int b) {
if (a >= b) {
return;
}
int p = pivot(a, b);
sw(&v[b], &v[p]);
int piv = v[b];
int left = a - 1 ;
int right = b;
while (left < right) {
while (left < right && v[++left] < piv) {
}
while (left < right && v[--right] > piv) {
}
sw(&v[left], &v[right]);
}
sw(&v[b], &v[left]);
qSort_(a, left - 1);
qSort_(left + 1, b);
}
void print_() {
for (int i = 0; i < n; i++) {
printf("%d ", v[i]);
}
}
int main() {
read_();
freopen("algsort.out", "w", stdout);
qSort_(0, n-1);
print_();
return 0;
}