Pagini recente » Cod sursa (job #3264329) | Cod sursa (job #932161) | Cod sursa (job #1392795) | Cod sursa (job #1560806) | Cod sursa (job #1385042)
#include <cstdio>
#include <algorithm>
using namespace std;
int n, v[500010];
inline void hip (int i)
{
if (2 * i > n) return;
if (2 * i + 1 > n && v[2 * i] >= v[i]) swap (v[2 * i], v[i]);
else if (max (v[2 * i], v[2 * i + 1]) > v[i])
{
int x;
if (v[2 * i] > v[2 * i + 1]) x = 2 * i;
else x = 2 * i + 1;
swap (v[i], v[x]);
hip (x);
}
}
int main ()
{
freopen ("algsort.in", "r", stdin);
freopen ("algsort.out", "w", stdout);
scanf ("%d", &n);
for (int i = 1; i <= n; ++i)
scanf ("%d", &v[i]);
for (int i = n / 2; i; --i)
hip (i);
int cn = n;
for (--n; n; --n)
{
swap (v[1], v[n + 1]);
hip (1);
}
for (int i = 1; i <= cn; ++i)
printf ("%d ", v[i]);
printf ("\n");
return 0;
}