Pagini recente » Cod sursa (job #1976116) | Cod sursa (job #1941051) | Cod sursa (job #233962) | Cod sursa (job #792861) | Cod sursa (job #360220)
Cod sursa(job #360220)
#include<stdio.h>
int n,h[100];
void schimb(int &i, int&j)
{
int aux;
aux=i;
i=j;
j=aux;
}
int pozmax(int i, int n)
{
if(2*i+1<=n)
if(h[2*i]>h[2*i+1]) return 2*i;
else return 2*i+1;
else return 2*i;
}
void divide(int i, int n)
{
int k;
if(i<=n/2)
{
k=pozmax(i,n);
if(h[k]>h[i])
{
schimb(h[k],h[i]);
divide(k,n);
}
}
}
void heap()
{
for(int i=n/2;i>=1;i--)
divide(i,n);
}
void heapsort()
{
int i;
heap();
for(i=n;i>1;i--)
{
schimb(h[1],h[i]);
divide(1,i-1);
}
}
int main()
{
freopen("algsort.in","r",stdin);
freopen("algsoft.out","w",stdout);
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%d",h+i);
heapsort();
for(int i=1;i<=n;i++)
printf("%d ",h[i]);
return 0;
}