Pagini recente » Cod sursa (job #1506370) | Cod sursa (job #1126576) | Cod sursa (job #1381454) | Cod sursa (job #154629) | Cod sursa (job #282564)
Cod sursa(job #282564)
#include <stdio.h>
#define dim 500100
int n, h[dim], k;
void swap(int &a, int &b)
{
int t=a;
a=b;
b=t;
}
void sift(int x)
{
int son, rson, lson;
do
{
son=0;
lson=x<<1;
rson=(x<<1)+1;
if (lson<=k) son=lson;
if (rson<=k && h[lson]<h[rson]) son=rson;
if (son && h[son]>h[x])
{
swap(h[x], h[son]);
x=son;
}
else son=0;
} while (son);
}
void build_heap()
{
int i;
k=n;
for (i=n/2; i; i--) sift(i);
}
void heap_sort()
{
build_heap();
while (k>1)
{
swap(h[1], h[k]);
k--;
sift(1);
}
}
int main()
{
int i;
freopen("algsort.in", "r", stdin);
freopen("algsort.out", "w", stdout);
scanf("%d\n", &n);
for (i=1; i<=n; i++) scanf("%d ", &h[i]);
heap_sort();
for (i=1; i<=n; i++) printf("%d ", h[i]);
return 0;
}