Pagini recente » Cod sursa (job #1843878) | Cod sursa (job #2699547) | Cod sursa (job #3311514) | Monitorul de evaluare | Cod sursa (job #1841485)
#include<bits/stdc++.h>
#define maxN 500005
using namespace std;
int h[maxN],n,x;
void urca(int i)
{
while(i>1)
{
if(h[i]>h[i/2]) swap(h[i],h[i/2]);
else break;
i>>=1;
}
}
void coboara(int i,int n)
{
int p,c;
p=i;
c=i<<1;
while(c<=n)
{
if((c+1)<=n && h[c+1]>h[c]) c++;
if(h[p]<h[c]) swap(h[p],h[c]);
else break;
p=c;
c=p<<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",&x);
h[i]=x;
urca(i);
}
for(int i=n;i>=2;i--)
{
swap(h[1],h[i]);
coboara(1,i-1);
}
for(int i=1;i<=n;i++) printf("%d ",h[i]);
printf("\n");
return 0;
}