Pagini recente » Cod sursa (job #1253776) | Cod sursa (job #499200) | Cod sursa (job #2564073) | Cod sursa (job #2528729) | Cod sursa (job #1234778)
#include <algorithm>
#include <cstdio>
using namespace std;
int n,a[500001],i;
void HeapUp (int n)
{
if (n<=1) return;
int t;
t=n/2;
if (a[n]>a[t])
{
swap(a[n],a[t]);
HeapUp(t);
}
}
void HeapDown (int n, int r)
{
int St,Dr;
if(2*r<=n)
{
St=a[2*r];
if (2*r+1 <=n) Dr=a[2*r+1];
else Dr=St-1;
if (St>Dr)
{
if (a[r]<a[2*r])
{
swap(a[2*r],a[r]);
HeapDown(n,2*r);
}
}
else
{
if (a[r]<a[2*r+1])
{
swap(a[2*r+1],a[r]);
HeapDown(n,2*r+1);
}
}
}
}
using namespace std;
int main ()
{
freopen("algsort.in","r",stdin);
freopen("algsort.out","w",stdout);
scanf ("%d",&n);
for (i=1; i<=n; i++)
{
scanf ("%d",&a[i]);
HeapUp(i);
}
int cn=n;
while (n>0)
{
swap(a[1],a[n]);
n--;
HeapDown(n,1);
}
for (i=1; i<=cn; i++) printf("%d ",a[i]);
return 0;
}