Pagini recente » Cod sursa (job #1470170) | Cod sursa (job #1664683) | Cod sursa (job #2414404) | Cod sursa (job #2215739) | Cod sursa (job #792717)
Cod sursa(job #792717)
#include<cstdio>
using namespace std;
int a[500005],dim_heap,n;
void swap (int &x, int &y)
{
int aux=x;
x=y;
y=aux;
}
void recons_heap (int x)
{
int maxim,l=2*x,d=2*x+1;
if (l<=dim_heap && a[l]>a[x])
maxim=l;
else maxim=x;
if (d<=dim_heap && a[d]>a[maxim])
maxim=d;
if (maxim!=x)
{
swap(a[x],a[maxim]);
recons_heap(maxim);
}
}
void build_heap ()
{
dim_heap=n;
for (int i=n/2; i>=1; i--)
recons_heap(i);
}
void heapsort ()
{
build_heap();
for (int i=n; i>=2; i--)
{
swap(a[1],a[i]);
dim_heap--;
recons_heap(1);
}
}
int main ()
{
int i;
freopen("heapsort.in","r",stdin);
freopen("heapsort.out","w",stdout);
scanf("%d",&n);
for (i=1; i<=n; i++)
scanf("%d",&a[i]);
heapsort();
for (i=1; i<=n; i++)
printf("%d ",a[i]);
return 0;
}