Pagini recente » Cod sursa (job #1457042) | Cod sursa (job #2329047) | Cod sursa (job #324972) | Cod sursa (job #780549) | Cod sursa (job #261647)
Cod sursa(job #261647)
#include <stdio.h>
#define N 500001
#define st(x) (2*(x))
#define dr(x) (2*(x)+1)
int heap[N],n;
void up(int i)
{int aux;
if(st(i)<=n&&heap[st(i)]>heap[i])
{aux=heap[st(i)];heap[st(i)]=heap[i];heap[i]=aux;
if(st(i)<=n/2)
{up(st(i));
}
}
if(dr(i)<=n&&heap[dr(i)]>heap[i])
{aux=heap[dr(i)];heap[dr(i)]=heap[i];heap[i]=aux;
if(dr(i)<=n/2)
{up(dr(i));
}
}
}
void heapsort()
{int i,aux;
for (i=n/2;i>=1;i--)
{up(i);}
for (;n>=1;)
{aux=heap[n];
heap[n]=heap[1];
heap[1]=aux;
n--;
up(1);
}
}
int main ()
{freopen("algsort.in","r",stdin);
freopen("algsort.out","w",stdout);
int i,m;
scanf("%d",&n);
m=n;
for(i=1;i<=n;i++)
{scanf("%d",&heap[i]);
}
heapsort();
for (i=1;i<=m;i++)
{printf("%d ",heap[i]);
}
return 0;
}