Pagini recente » Cod sursa (job #3218044) | Cod sursa (job #2452212) | Cod sursa (job #1406525) | Cod sursa (job #109364) | Cod sursa (job #1235528)
#include <cstdio>
#include <algorithm>
using namespace std;
long long n,a[550001],i,x,nn;
void heapup(int n)
{
if (n<=1) return ;
if (a[n/2]<a[n])
{
swap(a[n/2],a[n]);
heapup(n/2);
}
}
void heapdown(int n,int r)
{
if (a[2*r]>a[2*r+1]&&2*r<=n)
{
if (a[2*r]>a[r])
{
swap(a[2*r],a[r]);
heapdown(n,2*r);
}
else return ;
}
else if (a[2*r]==a[2*r+1]&&2*r+1<=n)
{
if (a[2*r+1]>a[r])
{
swap(a[2*r+1],a[r]);
heapdown(n,2*r+1);
}
else return ;
}
else if (a[2*r]<a[2*r+1]&&2*r+1<=n)
{
if (a[2*r+1]>a[r])
{
swap(a[2*r+1],a[r]);
heapdown(n,2*r+1);
}
else return ;
}
return ;
}
int main()
{
freopen("algsort.in","r",stdin);
freopen("algsort.out","w",stdout);
scanf("%d ",&n);
for (i=1; i<=n; i++)
{
scanf("%d",&x);
a[i]=x;
heapup(i);
}
nn=n;
while (n>2)
{
swap (a[1],a[n]);
n--;
heapdown(n,1);
}
for (i=1; i<=nn; i++)
printf("%d ",a[i]);
return 0;
}