Pagini recente » Cod sursa (job #2568660) | Cod sursa (job #2214080) | Cod sursa (job #2554045) | Cod sursa (job #2471208) | Cod sursa (job #765731)
Cod sursa(job #765731)
#include <stdio.h>
#include <fstream>
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 qSort_(int a, int b) {
if (a >= b) {
return;
}
int p = pivot(a, b);
sw(&v[a], &v[p]);
int piv = v[a];
int left = a + 1;
int right = b;
while (left <= right) {
while (left <= b && v[left] <= piv) {
left++;
}
while (right >= a && v[right] > piv) {
right--;
}
if (left < right) {
sw(&v[left], &v[right]);
}
}
sw(&v[a], &v[right]);
qSort_(a, right - 1);
qSort_(right + 1, b);
}
void print_() {
ofstream out("algsort.out");
for (int i = 0; i < n; i++) {
out << v[i] << " ";
}
out.close();
}
int main() {
read_();
qSort_(0, n-1);
print_();
return 0;
}