Cod sursa(job #376719)

Utilizator zenith09lucas eugene zenith09 Data 22 decembrie 2009 13:01:33
Problema Sortare prin comparare Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.93 kb
#include <stdio.h>

#define MAXN 500000

//heap
int h[MAXN + 1];
int lh = 0, n;

void interschimba(int& a, int& b)
{
	int aux = a;
	a = b;
	b = aux;
}

void coboara_in_heap(int poz)
{
	int k;k=poz;
	while(h[k]>h[2*k]||h[k]>h[2*k+1])
	{
		k=poz;
		if(2*poz<=lh) if(h[2*poz]<h[poz]) k=2*poz;	
		if(2*poz+1<=lh) if(h[2*poz+1]<h[k]) k=2*poz+1;	
		if(k!=poz)
		{
			interschimba(h[k], h[poz]);
			poz=k;
		}
		break;
	}
}

void urca_in_heap(int poz)
{
	while(h[poz/2]>h[poz])
	{
		if(h[poz/2]>h[poz])
		{
			interschimba(h[poz/2],h[poz]);
			poz=poz/2;
		}		
		break;
	}
}


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);
		lh++;
		urca_in_heap(lh);
	}
	
	while(lh)
	{
		printf("%d ", h[1]); //minim
		interschimba(h[1], h[lh]);
		lh--;
		coboara_in_heap(1);
	}
	
	return 0;
}