Pagini recente » Cod sursa (job #106411) | Cod sursa (job #798564) | Cod sursa (job #2692104) | Cod sursa (job #2633039) | Cod sursa (job #1235839)
#include <cstdio>
using namespace std;
int k,t,aux,h[500004],n,i;
void UP(int k)
{
int t,aux;
if (k==1)
return;
t=k/2;
if (h[t]<h[k])
{
aux=h[t];
h[t]=h[k];
h[k]=aux;
UP(t);
}
}
void DOWN(int n, int k)
{
int st,dr,i,aux;
if (2*k<=n)
{
st=h[2*k];
if (2*k+1<=n)
dr=h[2*k+1];
else
dr=-1;
if (st>dr)
i=2*k;
else
i=2*k+1;
if (h[i]>h[k])
{
aux=h[i];
h[i]=h[k];
h[k]=aux;
DOWN(n,i);
}
}
}
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]);
UP(i);
}
for (i=n;i>=1;i--)
{
aux=h[1];
h[1]=h[i];
h[i]=aux;
DOWN(i-1,1);
}
for (i=1;i<=n;i++)
printf ("%d ", h[i]);
return 0;
}