Pagini recente » Cod sursa (job #1020477) | Cod sursa (job #1411423) | Cod sursa (job #446359) | Cod sursa (job #1798158) | Cod sursa (job #1236186)
#include <cstdio>
#include <algorithm>
using namespace std;
int v[1000010];
void hip (int k, int n)
{
if ((2 * k + 1 > n || (v[2 * k] >= v[2 * k + 1])) && 2 * k <= n)
{
if (v[2 * k] > v[k])
{
swap (v[2 * k], v[k]);
if (2 * k <= n / 2) hip (2 * k, n);
}
}
else if (2 * k + 1 <= n && v[2 * k] < v[2 * k + 1])
{
if (v[2 * k + 1] > v[k])
{
swap (v[2 * k + 1], v[k]);
if (2 * k + 1 <= n / 2) hip (2 * k + 1, n);
}
}
}
int main ()
{
freopen ("algsort.in", "r", stdin);
freopen ("algsort.out", "w", stdout);
int n;
scanf ("%d", &n);
for (int i = 1; i <= n; ++i)
scanf ("%d", &v[i]);
for (int i = n / 2; i; --i)
hip (i, n);
int cn = n;
for (; n > 1; --n)
{
swap (v[1], v[n]);
hip (1, n - 1);
}
for (int i = 1; i <= cn; ++i)
printf ("%d ", v[i]);
printf ("\n");
return 0;
}