Pagini recente » Atasamentele paginii Profil Divad | Atasamentele paginii Profil kipp | Atasamentele paginii Profil q1e123 | Istoria paginii utilizator/continformatica | Cod sursa (job #1036741)
#include<cstdio>
using namespace std;
int n,a[500005];
void interschimba(int &A, int &B)
{
int aux=A;
A=B, B=aux;
}
void reconstituie_heap(int s, int lung)
{
int Max=a[s],p=s;
if (2*s<=lung && Max<a[2*s]) Max=a[2*s], p=2*s;
if (2*s+1<=lung && Max<a[2*s+1]) Max=a[2*s+1], p=2*s+1;
interschimba(a[s],a[p]);
if (p!=s) reconstituie_heap(p,lung);
}
void construieste_heap(int lung)
{
int i;
for (i=1;i<=lung/2;++i)
reconstituie_heap(i,lung);
}
int main()
{
int i;
freopen("algsort.in","r",stdin);
freopen("algsort.out","w",stdout);
scanf("%d",&n);
for (i=1;i<=n;++i)
scanf("%d",&a[i]);
construieste_heap(n);
for (i=n;i>1;--i)
{
interschimba(a[i],a[1]);
construieste_heap(i-1);
}
for (i=1;i<=n;++i)
printf("%d ",a[i]);
printf("\n");
return 0;
}