Pagini recente » Cod sursa (job #2852868) | Cod sursa (job #587097) | Cod sursa (job #1267845) | Cod sursa (job #579997) | Cod sursa (job #1232684)
#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;
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=1; i<n; i++)
HeapUp(i);
while(n>0)
{
schimba(1,n);
n--;
HeapDw(1,n);
}
if(H[1]>H[2]) schimba(1,2);
for(i=1; i<=z; i++)
printf("%d ",H[i]);
return 0;
}