Pagini recente » Cod sursa (job #1346268) | Cod sursa (job #2282470) | Cod sursa (job #1682931) | Cod sursa (job #1082291) | Cod sursa (job #2279115)
#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 (l <= dr && a[l] < piv2)
l++;
while (r >= l && a[r] > piv2)
r--;
if (a[l] == a[r])
break;
swap(a[l], a[r]);
}
Sort(st, l - 1);
Sort(l + 1, 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;
}