Pagini recente » Cod sursa (job #243896) | Cod sursa (job #1577592) | Cod sursa (job #2087414) | Cod sursa (job #2415896) | Cod sursa (job #1234372)
#include <cstdio>
using namespace std;
int a[500000],i,j,m,n,z;
void schimba(int x, int y)
{
int aux;
aux=a[x];
a[x]=a[y];
a[y]=aux;
}
void HeapDwn(int i,int n)
{
int st,dr;
if(2*i>n) return;
st=a[2*i];
if(2*i+1>n) dr=st-1;
else dr=a[2*i+1];
if(st>dr)
{
schimba(2*i,i);
HeapDwn(2*i,n);
}
else
{
schimba(2*i+1,i);
HeapDwn(2*i+1,n);
}
}
void HeapUp(int x)
{
int k;
k=x/2;
if(x<=1) return;
if(a[k]<a[x])
{
schimba(x,k);
HeapUp(k);
}
}
int main()
{
freopen("algsort.in","r",stdin);
freopen("algsort.out","w",stdout);
scanf("%d",&n);z=n;
for(i=1; i<=n; i++)
scanf("%d",&a[i]);
for(i=2; i<=n; i++)
HeapUp(i);
while(z>1)
{
schimba(1,z);
z--;
HeapDwn(1,z);
}
for(i=1; i<=n; i++)
printf("%d ",a[i]);
printf("\n");
return 0;
}