Cod sursa(job #750747)

Utilizator bodyionitaIonita Bogdan Constantin bodyionita Data 23 mai 2012 07:58:51
Problema Sortare prin comparare Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.77 kb
#include <cstdio>
using namespace std;
int n,i,j,x,h[100];
void swap(int a, int b)
{
	int x;
	x=h[a];h[a]=h[b];h[b]=x;
}
void heapdw(int k, int n)
{
	int x,y,i;
	if (2*k<=n) 
	{
		x=h[2*k];
		if (2*k+1<=n) y=h[2*k+1]; else y=x-1;
		if (x>y) i=2*k; else i=2*k+1;
		if (h[k]<h[i])
		{
			swap(i,k);
			heapdw(i,n);
		}
	}
}
void heapup(int k)
{
	if (k>1)
	{
	if (h[k]>h[k/2]) 
	{
		swap(k,k/2);
		heapup(k/2);
	}
    }
}
	
int main()
{
	freopen("algsort.in","r",stdin);
	freopen("algsort.out","w",stdout);
	scanf("%d",&n);
	for (i=1;i<=n;i++)
	{
		scanf("%d",&h[i]);
	}
	for (i=1;i<=n-1;i++)
	{
		heapup(i);
	}
	for (i=1;i<=n-1;i++)
	{
        swap(1,n-i+1);
		heapdw(1,n-i);
	}
	for (i=1;i<=n;i++)
		printf("%d ",h[i]);
	return 0;
}