Pagini recente » Cod sursa (job #1076570) | Cod sursa (job #1368972) | Cod sursa (job #845063) | Cod sursa (job #2233263) | Cod sursa (job #2279123)
#include <bits/stdc++.h>
#pragma GCC optimize("03")
using namespace std;
ifstream in("algsort.in");
ofstream out("algsort.out");
int n, a[500100];
void Sort(int st, int dr) {
if (st >= dr)
return;
int len = dr - st + 1;
int piv1 = rand() % len + st;
int piv2 = rand() % len + st;
int piv3 = rand() % len + st;
piv1 = a[piv1];
piv2 = a[piv2];
piv3 = a[piv3];
if (piv1 > piv2)
swap(piv1, piv2);
if (piv2 > piv3)
swap(piv2, piv3);
if (piv1 > piv2)
swap(piv1, piv2);
int l = st, r = dr;
while (l <= r) {
while (a[l] < piv2)
l++;
while (a[r] > piv2)
r--;
if (l <= r) {
swap(a[l], a[r]);
l++;
r--;
}
}
Sort(st, r);
Sort(l, dr);
}
int main() {
srand(time(NULL));
in >> n;
for (int i = 1; i <= n; i++)
in >> a[i];
Sort(1, n);
for (int i = 1; i <= n; i++)
out << a[i] << ' ';
return 0;
}