Pagini recente » Diferente pentru utilizator/sandu_alin intre reviziile 1 si 2 | Diferente pentru utilizator/grezde intre reviziile 1 si 2 | Diferente pentru utilizator/mirunavelea intre reviziile 1 si 5 | Atasamentele paginii Profil andy123 | Cod sursa (job #1036747)
#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=lung/2;i;--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]);
reconstituie_heap(1,i-1);
}
for (i=1;i<=n;++i)
printf("%d ",a[i]);
printf("\n");
return 0;
}