Pagini recente » Cod sursa (job #579326) | Cod sursa (job #2735551) | Cod sursa (job #584010) | Cod sursa (job #55177) | Cod sursa (job #1558154)
#include <stdio.h>
using namespace std;
int n;
int v[500005];
void creare_heap()
{
int i,j,k,h;
scanf("%d",&(v[1]));
for(j=2;j<=n;j++)
{
scanf("%d",&(v[j]));
i=j;
while(i>1)
{
h=i>>1;
if(v[i]>v[h]) {k=v[h];v[h]=v[i];v[i]=k;i=h;}
else break;
}
}
}
int extrage()
{
int i=1,j,k,x=v[1];
v[1]=v[n--];
while(i*2<=n)
{
j=i*2;
if(j+1<=n&&v[j+1]>v[j]) j++;
if(v[j]>v[i]) {k=v[i];v[i]=v[j];v[j]=k;i=j;}
else break;
}
return x;
}
void hsort()
{
int k=n,i;
for(i=n;i>1;i--)
v[i]=extrage();
n=k;
}
void tipar()
{
for(int i=1;i<=n;i++)
printf("%d ",v[i]);
}
int main()
{
freopen("algsort.in","r",stdin);
freopen("algsort.out","w",stdout);
scanf("%d",&n);
creare_heap();
hsort();
tipar();
return 0;
}