Pagini recente » Cod sursa (job #3233537) | Cod sursa (job #894390) | Cod sursa (job #1873796) | Cod sursa (job #336635) | Cod sursa (job #1234377)
#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 HeapDw(int r, int k)
{
int St,Dr,i;
if(2*r<=k)
{
St=a[2*r];
if(2*r+1<=k) Dr=a[2*r+1];
else Dr=St-1;
if(St>Dr) i=2*r;
else i=2*r+1;
if(a[r]<a[i])
{
schimba(r,i);
HeapDw(i,k);
}
}
}
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--;
HeapDw(1,z);
}
for(i=1; i<=n; i++)
printf("%d ",a[i]);
printf("\n");
return 0;
}