Cod sursa(job #360225)

Utilizator BooZZySandu Bogdan BooZZy Data 30 octombrie 2009 17:40:27
Problema Sortare prin comparare Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.92 kb
#include<stdio.h>
int n,h[500001];
//void schimb(int &i, int&j)
//{
//	int aux;
//	aux=i;
//	i=j;
//	j=aux;
//}
int pozmax(int i, int n)
{
	if(2*i+1<=n)
		if(h[2*i]>h[2*i+1]) return 2*i;
		else return 2*i+1;
	else return 2*i;
}
void divide(int i, int n)
{
	int k;
	if(i<=n/2)
	{
		k=pozmax(i,n);
		if(h[k]>h[i])
		{
			int aux=h[k];
			h[k]=h[i];
			h[i]=aux;
			//schimb(h[k],h[i]);
			divide(k,n);
		}
	}
}
//void heap()
//{
//	for(int i=n/2;i>=1;i--)
//		divide(i,n);
//}
void heapsort()
{
	int i;
	for(int i=n/2;i>=1;i--)
		divide(i,n);
	//heap();
	for(i=n;i>1;i--)
	{
		int aux=h[1];
		h[1]=h[i];
		h[i]=h[1];
		//schimb(h[1],h[i]);
		divide(1,i-1);
	}
}
int main()
{
	freopen("algsort.in","r",stdin);
	freopen("algsort.out","w",stdout);
	scanf("%d",&n);
	for(int i=1;i<=n;i++)
		scanf("%d",h+i);
	heapsort();
	for(int i=1;i<=n;i++)
		printf("%d ",h[i]);
	return 0;
}