Cod sursa(job #344671)

Utilizator cosmin79Carabet Cosmin Andrei cosmin79 Data 31 august 2009 12:26:29
Problema Sortare prin comparare Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 1.06 kb
#include <stdio.h>
#define N 1<<19
int n, dim;
long long heap[N];
void interschimba(int poz1, int poz2)
{
	int temp = heap[poz1];
	heap[poz1] = heap[poz2];
	heap[poz2] = temp;
}
void muta_in_sus(int poz)
{
	if (poz > 1 && heap[poz/2] > heap[poz]) 
	{
		interschimba(poz, poz/2);
		muta_in_sus(poz/2);
	}
}
void muta_in_jos(int poz)
{
	if ((2*poz  <= n && heap[poz] > heap[2*poz] ) ||
		(2*poz+1<= n && heap[poz] > heap[2*poz+1])) 
		{
			int maximum = 2*poz;
			if (2*poz+1 <= n && heap[2*poz+1] < heap[2*poz]) 
				maximum = 2*poz+1;
			interschimba(poz, maximum);
			muta_in_jos(maximum);
		}
}
long long extrage_minim()
{
	int ret = heap[1];
	heap[1] = heap[n--];
	muta_in_jos(1);
	return ret;
}
void heapify()
{
	int i;
	for (i = n; i >=1; i--) 
		muta_in_jos(i);
}
int main()
{
	freopen("algsort.in","r",stdin);
	freopen("algsort.out","w",stdout);
	int i;
	scanf("%d", &n);
	dim = n;
	for (i = 1; i <= n; i++) 
		scanf("%lld", &heap[i]);
	heapify();
	for (i = 1; i <= dim; i++) 
		printf("%lld ", extrage_minim());
	return 0;
}