Pagini recente » Cod sursa (job #1938159) | Cod sursa (job #534851) | Cod sursa (job #1925698) | Cod sursa (job #1853516) | Cod sursa (job #2279106)
#include <bits/stdc++.h>
using namespace std;
ifstream in("algsort.in");
ofstream out("algsort.out");
int n, a[500100], aux[500100];
void Sort(int st, int dr) {
if (st >= dr)
return;
int len = dr - st + 1;
int piv1 = rand() % min(32000, len) + st;
int piv2 = rand() % min(32000, len) + st;
int piv3 = rand() % min(32000, 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 - 1;
int r = dr + 1;
for (int i = st; i <= dr; i++)
if (a[i] < piv2)
aux[++l] = a[i];
else if (a[i] > piv2)
aux[--r] = a[i];
for (int i = st; i <= dr; i++)
if (a[i] == piv2)
aux[++l] = piv2;
for (int i = st; i <= dr; i++)
a[i] = aux[i];
Sort(st, l - 1);
Sort(l + 1, dr);
}
int main() {
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;
}