Pagini recente » Cod sursa (job #3241879) | Cod sursa (job #2072576) | Cod sursa (job #2965670) | Cod sursa (job #585770) | Cod sursa (job #1232685)
#include <cstdio>
using namespace std;
int i,j,m,n,H[500000],z;
void schimba(int x,int y)
{
int aux;
aux=H[x];
H[x]=H[y];
H[y]=aux;
}
void HeapUp(int k)
{
int i,x;
if(k<=1) return;
x=k/2;
if(H[x]<H[k])
{
schimba(x,k);
HeapUp(x);
}
}
void HeapDw(int l, int k)
{
int st,dr,kk;
if(2*l>k) return;
else dr=st-1;
st=H[2*l];
if(2*l+1<=k) dr=H[2*l+1];
if(st>=dr) kk=2*l;
else kk=2*l+1;
if(H[l]<H[kk]){
schimba(l,kk);
HeapDw(kk,k);}
}
int main()
{
freopen("algsort.in","r",stdin);
freopen("algsort.out","w",stdout);
scanf("%d",&n);z=n;
for(i=1; i<=n; i++)
scanf("%d",&H[i]);
for(i=2; i<n; i++)
HeapUp(i);
while(n>1)
{
schimba(1,n);
n--;
HeapDw(1,n);
}
for(i=1; i<=z; i++)
printf("%d ",H[i]);
return 0;
}