Cod sursa(job #319507)
#include <cstdio>
#define file_in "algsort.in"
#define file_out "algsort.out"
#define Nmax 500100
int n,v[Nmax];
inline void insert_heap(int n, int x)
{
int fiu=++n;
int tata=n>>1;
while(tata && v[tata]<x)
{
v[fiu]=v[tata];
fiu=tata;
tata=fiu>>1;
}
v[fiu]=x;
}
inline void creare_heap()
{
int i;
for (i=2;i<=n;++i)
insert_heap(i-1,v[i]);
}
inline void comb_heap(int i, int n)
{
int h=v[i];
int tata=i;
int fiu=i*2;
while (fiu<=n)
{
if (fiu<n)
if (v[fiu]<v[fiu+1])
fiu++;
if (h<v[fiu])
{
v[tata]=v[fiu];
tata=fiu;
fiu*=2;
}
else
fiu=n+1;
}
v[tata]=h;
}
inline void heapsort()
{
int i,aux;
creare_heap();
for (i=n;i>1;--i)
{
aux=v[1];
v[1]=v[i];
v[i]=aux;
comb_heap(1,i-1);
}
}
int main()
{
int i;
freopen(file_in,"r",stdin);
freopen(file_out,"w",stdout);
scanf("%d", &n);
for (i=1;i<=n;++i)
scanf("%d", &v[i]);
heapsort();
for (i=1;i<=n;++i)
printf("%d ", v[i]);
fclose(stdin);
fclose(stdout);
return 0;
}