Cod sursa(job #360220)

Utilizator BooZZySandu Bogdan BooZZy Data 30 octombrie 2009 17:31:43
Problema Sortare prin comparare Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.75 kb
#include<stdio.h>
int n,h[100];
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])
		{
			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;
	heap();
	for(i=n;i>1;i--)
	{
		schimb(h[1],h[i]);
		divide(1,i-1);
	}
}
int main()
{
	freopen("algsort.in","r",stdin);
	freopen("algsoft.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;
}