Cod sursa(job #274914)

Utilizator gabor_oliviu1991gaboru corupt gabor_oliviu1991 Data 10 martie 2009 08:39:55
Problema Sortare prin comparare Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 1.05 kb
// heap

#include<stdio.h>

int a[100],n;

void schimb(int &kaka,int &zidane)
{
	int becali = kaka;
	kaka = zidane;
	zidane = becali;
}


void create_heap()
{
	int i, j;

	scanf("%d",&n);

	scanf("%d",&a[1]);

	for(j = 2; j <= n; j++)
	{
		scanf("%d",&a[j]);
		i = j;
		while(i > 1)
			if(a[i] >= a[i/2])
				{
				schimb(a[i],a[i/2]);
				i = i/2;
				}
			else
				i = 1;
	}
}

int erase()
{
	int i = 1, j, x = a[1];

	a[1] = a[n];
	n--;
	while(i <= n)
		if( 2*i <= n)
		{
			j = 2*i;
			if(j+1 <=n && a[j+1] >= a[j])
				j++;
			if(a[i] <= a[j])
				{
				schimb(a[i],a[j]);
				i = j;
				}
			else
				i = n+1;
		}
		else
			i = n+1;
	return x;
}



void heapsort()
{
	int i,j;

	j = n;

	for(i = n; i >= 1; i--)
		a[i] = erase();

	n = j;
}

int main()
{
	freopen("algsort.in","r",stdin);
	freopen("algsort.out","w",stdout);

	create_heap();

	//for(int i = 1; i <= n; i++)
	//	printf("%d ",a[i]);

	heapsort();

	for(int i = 1; i <= n; i++)
		printf("%d ",a[i]);

	return 0;

}