Pagini recente » Cod sursa (job #1910289) | Cod sursa (job #2557276) | Cod sursa (job #2604949) | Cod sursa (job #571989) | Cod sursa (job #750747)
Cod sursa(job #750747)
#include <cstdio>
using namespace std;
int n,i,j,x,h[100];
void swap(int a, int b)
{
int x;
x=h[a];h[a]=h[b];h[b]=x;
}
void heapdw(int k, int n)
{
int x,y,i;
if (2*k<=n)
{
x=h[2*k];
if (2*k+1<=n) y=h[2*k+1]; else y=x-1;
if (x>y) i=2*k; else i=2*k+1;
if (h[k]<h[i])
{
swap(i,k);
heapdw(i,n);
}
}
}
void heapup(int k)
{
if (k>1)
{
if (h[k]>h[k/2])
{
swap(k,k/2);
heapup(k/2);
}
}
}
int main()
{
freopen("algsort.in","r",stdin);
freopen("algsort.out","w",stdout);
scanf("%d",&n);
for (i=1;i<=n;i++)
{
scanf("%d",&h[i]);
}
for (i=1;i<=n-1;i++)
{
heapup(i);
}
for (i=1;i<=n-1;i++)
{
swap(1,n-i+1);
heapdw(1,n-i);
}
for (i=1;i<=n;i++)
printf("%d ",h[i]);
return 0;
}