Pagini recente » Cod sursa (job #2315542) | Cod sursa (job #2374401) | Cod sursa (job #628186) | Cod sursa (job #899303) | Cod sursa (job #1238303)
#include <cstdio>
using namespace std;
int i,j,m,n,H[500001],z;
void schimba(int x,int y)
{
int aux;
aux=H[x];
H[x]=H[y];
H[y]=aux;
}
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]; else dr=st-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=n/2 ; i ; i--)
HeapDw(i,n);
while(n>0)
{
schimba(1,n);
n--;
HeapDw(1,n);
}
for(i=1; i<=z; i++)
printf("%d ",H[i]);
return 0;
}