Pagini recente » Cod sursa (job #1707508) | Cod sursa (job #2939917) | Cod sursa (job #1116192) | Cod sursa (job #411589) | Cod sursa (job #1040922)
#include <cstdio>
using namespace std;
int v[1000],n,i,x;
void swap(int x,int y)
{
int aux;
aux=v[x];
v[x]=v[y];
v[y]=aux;
}
void heapup(int x,int i)
{
int l;
l=i;
while (l>=2 && v[l]>v[l/2])
{
swap(l,l/2);
l=l/2;
}
}
void heapdown(int x,int i)
{
int l,k;
if (v[i*2]>v[i*2+1]) k=i*2;
else k=i*2+1;
swap(i,k);
l=k;
if (v[l*2]>v[l*2+1]) k=l*2;
else k=l*2+1;
while (l<=n && v[l]>v[k])
{
swap(l,k);
l=k;
if (v[l*2]>v[l*2+1]) k=l*2;
else k=l*2+1;
}
}
int main()
{
freopen("algsort.in","r",stdin);
freopen("aglsort.out","w",stdout);
scanf("%d",&n);
for (i=1; i<=n; i++)
{
scanf("%d",&v[i]);
if (i!=1 && v[i]>v[i/2])
heapup(v[i],i);
}
for (i=1; i<=n; i++)
{
heapdown(v[i],i);
}
for (i=1; i<=n; i++)
printf("%d ",v[i]);
return 0;
}