Pagini recente » Cod sursa (job #1770647) | Cod sursa (job #3289663) | Cod sursa (job #2298821) | Cod sursa (job #2527463) | Cod sursa (job #3125753)
#include <bits/stdc++.h>
using namespace std;
ifstream f ("algsort.in");
ofstream g ("algsort.out");
const int nmax = 5e5 + 3;
int t1, t2, v[nmax], n;
int solve(int st, int dr)
{
int pivot = v[st];
int cnt = 0;
for (int i = st + 1; i <= dr; ++i)
cnt += (v[i] <= pivot);
int idx = st + cnt;
swap(v[st], v[idx]);
int t1 = st;
int t2 = dr;
while (t1 < idx && t2 > idx)
{
while (v[t1] <= pivot)
++t1;
while (v[t2] > pivot)
--t2;
if (t1 < idx && t2 > idx)
{
swap(v[t1++], v[t2--]);
}
}
return idx;
}
void qsort(int st, int dr)
{
if (st >= dr)
return;
int poz = solve(st, dr);
qsort(st, poz - 1);
qsort(poz + 1, dr);
}
int main()
{
f >> n;
for (int i = 1; i <= n; ++i)
f >> v[i];
qsort(1, n);
for (int i = 1; i <= n; ++i)
g << v[i] << ' ';
return 0;
}