Cod sursa(job #360240)
#include<fstream.h>
int h[500010],i,n;
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>0; i--)
divide(i,n);
}
void heapsort()
{
heap();
for(int i=n;i>1;i--)
{
schimb(h[1],h[i]);
divide(1,i-1);
}
}
int main()
{
ifstream f("algsort.in");
ofstream g("algsort.out");
f>>n;
for(i=1;i<=n;i++) f>>h[i];
heapsort();
for(i=1;i<=n;i++) g<<h[i]<<" ";
return 0;
}