Pagini recente » Cod sursa (job #254344) | Cod sursa (job #1721095) | Cod sursa (job #331145) | Cod sursa (job #1295508) | Cod sursa (job #1233074)
#include <cstdio>
#include <algorithm>
using namespace std;
int h[1000010];
void heapup (int k)
{
if (k == 1) return;
if (h[k / 2] < h[k])
{
swap (h[k / 2], h[k]);
heapup (k / 2);
}
}
void heapdown (int k, int n)
{
if (h[2 * k] >= h[2 * k + 1] && 2 * k <= n)
{
if (h[2 * k] > h[k])
{
swap (h[2 * k], h[k]);
heapdown (2 * k, n);
}
}
else if (h[2 * k] <= h[2 * k + 1] && 2 * k + 1 <= n)
{
if (h[2 * k + 1] > h[k])
{
swap (h[2 * k + 1], h[k]);
heapdown (2 * k + 1, n);
}
}
else if (2 * k + 1 > n && 2 * k <= n)
{
if (h[2 * k] > h[k])
{
swap (h[2 * k], h[k]);
heapdown (2 * k, n);
}
}
return;
}
int main ()
{
freopen ("algsort.in", "r", stdin);
freopen ("algsort.out", "w", stdout);
int n;
scanf ("%d", &n);
for (int i = 1; i <= n; ++i)
{
int x;
scanf ("%d", &x);
h[i] = x;
heapup (i);
}
for (int k = n; k > 1; --k)
{
swap (h[1], h[k]);
heapdown (1, k - 1);
}
for (int i = 1; i <= n; ++i)
printf ("%d ", h[i]);
printf ("\n");
return 0;
}