Pagini recente » Cod sursa (job #2143822) | Cod sursa (job #923439) | Cod sursa (job #1622632) | Cod sursa (job #2751506) | Cod sursa (job #976134)
Cod sursa(job #976134)
#include<stdio.h>
#include<algorithm>
#define maxn 500005
using namespace std;
int n,nh;
int h[maxn];
void read()
{
scanf("%d",&n);
for(int i=1;i<=n;i++) scanf("%d",&h[i]);
}
void heap_up(int k)
{
if(k<=1) return;
int i=k/2;
if(h[k]>h[i])
{
swap(h[k],h[i]);
heap_up(i);
}
}
void heap_dw(int k)
{
int i=2*k;
if(i<=nh)
{
if(i+1<=nh && h[i+1]>h[i]) i++;
if(h[i]>h[k])
{
swap(h[i],h[k]);
heap_dw(i);
}
}
}
void build()
{
for(int i=1;i<=n;i++) heap_up(i);
}
void heap_sort()
{
nh=n;
while(nh>0)
{
swap(h[1],h[nh--]);
heap_dw(1);
}
}
void print()
{
for(int i=1;i<=n;i++) printf("%d ",h[i]);
}
int main()
{
freopen("algsort.in","r",stdin);
freopen("algsort.out","w",stdout);
read();
build();
heap_sort();
print();
fclose(stdin);
fclose(stdout);
return 0;
}