Pagini recente » Cod sursa (job #2959019) | Cod sursa (job #987137) | Cod sursa (job #1997814) | Cod sursa (job #2234628) | Cod sursa (job #363471)
Cod sursa(job #363471)
#include<stdio.h>
int h[500010],i,n,k;
void swap ( int i, int j)
{
int aux;
aux=h[i]; h[i]=h[j]; h[j]=aux;
}
int pozm ( int i, int n)
{
if(i*2+1<=n)
{
if( h[i*2+1]>h[i*2] ) return i*2+1;
else return i*2;
}
else return i*2;
}
void update ( int i, int n)
{
if(i<=n/2)
{
k=pozm(i,n);
if(h[k]>h[i])
{
swap(k,i);
update(k,n);
}
}
}
void heap()
{
int i;
for(i=n/2;i>0;i--)
update(i,n);
}
void heapsort()
{
int i;
heap();
for(i=n;i>1;i--)
{
swap(1,i);
update(1,i-1);
}
}
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]);
heapsort();
for(i=1;i<=n;i++)
printf("%d ",h[i]);
return 0;
}