Pagini recente » Cod sursa (job #2707761) | Cod sursa (job #2694507) | Cod sursa (job #2176298) | Cod sursa (job #2426827) | Cod sursa (job #1236193)
# include <cstdio>
#include <algorithm>
using namespace std;
int a[500001],n,i;
void CombHeap(int i, int n)
{
int St,Dr;
if (2*i<=n)
{
St=a[2*i];
if (2*i+1 <=n) Dr=a[2*i+1];
else Dr=St-1;
if (St>Dr)
{
if (a[i]<a[2*i])
{
swap(a[2*i],a[i]);
CombHeap(2*i,n);
}
}
else if (a[i]<a[2*i+1])
{
swap(a[2*i+1],a[i]);
CombHeap(2*i+1,n);
}
}
}
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]);
for (i=n/2; i; i--) CombHeap(i,n);
int cn=n;
while (n>0)
{
swap(a[1],a[n]);
n--;
CombHeap(1,n);
}
for (i=1; i<=cn; i++) printf("%d ",a[i]);
return 0;
}