Pagini recente » Cod sursa (job #2609387) | Cod sursa (job #309206) | Cod sursa (job #2333691) | Cod sursa (job #2779230) | Cod sursa (job #1385022)
# include <cstdio>
# include <algorithm>
# define MAX 500005
using namespace std;
int a[MAX], i, n;
void Heap (int i)
{
int st, dr;
if (2 * i > n) return;
if (2 * i <= n)
{
st = a[2*i];
if (2 * i + 1 <= n) dr = a[2 * i + 1];
else dr = st - 1;
if (st > dr)
{
if (a[2 * i] > a[i])
{
swap(a[2 * i], a[i]);
Heap(2 * i);
}
}
else if (a[2 * i + 1] > a[i])
{
swap(a[2 * i + 1], a[i]);
Heap(2 * i + 1);
}
}
}
int main ()
{
freopen("algsort.in","r",stdin);
freopen("algsort.out","w",stdout);
scanf("%d",&n);
int cn = n;
for (i = 1; i <= n; i++)
scanf("%d",&a[i]);
for (i = n / 2; i >= 1; i--) Heap(i);
while (n > 0) {
swap (a[1], a[n]);
n--;
Heap(1);
}
for (i = 1; i <= cn; i++)
printf("%d ", a[i]);
printf("\n");
return 0;
}