Pagini recente » Cod sursa (job #15877) | Cod sursa (job #2539925) | Cod sursa (job #1339932) | Cod sursa (job #1105439) | Cod sursa (job #278927)
Cod sursa(job #278927)
#include <stdio.h>
int N, K, h[500005];
void swap(int x, int y)
{
int aux = h[x]; h[x] = h[y]; h[y] = aux;
}
void urc(int p)
{
if (p > 1)
if (h[p] < h[p >> 1]) {swap(p, p >> 1); urc(p >> 1);}
}
void cobor(int p)
{
int m, st, dr;
m = p; st = m << 1; dr = st + 1;
if (st <= K) if (h[m] > h[st]) m = st;
if (dr <= K) if (h[m] > h[dr]) m = dr;
if (m != p)
{
swap(p, m);
cobor(m);
}
}
int main()
{
freopen("algsort.in","r",stdin);
freopen("algsort.out","w",stdout);
scanf("%d",&N);
int i, x;
for (i = 1; i <= N; i++)
{
scanf("%d", &x);
h[++K] = x;
urc(K);
}
while (K)
{
printf("%d ",h[1]);
swap(1, K);
K--;
cobor(1);
}
return 0;
}