Pagini recente » Cod sursa (job #460902) | Cod sursa (job #1026448) | Cod sursa (job #147082) | Cod sursa (job #637969) | Cod sursa (job #1233652)
#include <cstdio>
#include <algorithm>
using namespace std;
int i,j,k,a[500009],n;
void HeapUp(int i)
{
if(i==1) return;
if(a[i]>a[i/2])
{
swap(a[i],a[i/2]);
HeapUp(i/2);
}
}
void HeapDown(int k,int n)
{
if(2*k<=n && a[2*k]>a[2*k+1])
{
if(a[2*k]>a[k])
{
swap(a[2*k],a[k]);
HeapDown(2*k,n);
}
}
else if(2*k+1<=n && a[2*k+1]>=a[2*k])
{
if(a[2*k+1]>a[k])
{
swap(a[2*k+1],a[k]);
HeapDown(2*k+1,n);
}
}
else if(2*k==n)
{
if(a[k]<a[2*k])
{
swap(a[2*k],a[k]);
HeapDown(2*k,n);
}
}
}
int main()
{
freopen("algsort.in","r",stdin);
freopen("algsort.out","w",stdout);
scanf("%d",&n);
for(i=1; i<=n; ++i)
{
scanf("%d",&a[i]);
HeapUp(i);
}
for(i=n-1;i>=1;--i)
{
swap(a[1],a[i+1]);
HeapDown(1,i);
}
for(i=1;i<=n;++i)
printf("%d ",a[i]);
printf("\n");
return 0;
}