Pagini recente » Cod sursa (job #710509) | Cod sursa (job #894342) | Cod sursa (job #2662367) | Cod sursa (job #2978837) | Cod sursa (job #360225)
Cod sursa(job #360225)
#include<stdio.h>
int n,h[500001];
//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])
{
int aux=h[k];
h[k]=h[i];
h[i]=aux;
//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;
for(int i=n/2;i>=1;i--)
divide(i,n);
//heap();
for(i=n;i>1;i--)
{
int aux=h[1];
h[1]=h[i];
h[i]=h[1];
//schimb(h[1],h[i]);
divide(1,i-1);
}
}
int main()
{
freopen("algsort.in","r",stdin);
freopen("algsort.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;
}