Pagini recente » Borderou de evaluare (job #2019907) | Cod sursa (job #2528541) | Cod sursa (job #516155) | Cod sursa (job #1410480) | Cod sursa (job #1385016)
# 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 = 0;
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;
}