Cod sursa(job #278927)

Utilizator gabitzish1Gabriel Bitis gabitzish1 Data 12 martie 2009 16:49:37
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.71 kb
#include <stdio.h>

int N, K, h[500005];

void swap(int x, int y)
{
	int aux = h[x]; h[x] = h[y]; h[y] = aux;
}

void urc(int p)
{
	if (p > 1)
		if (h[p] < h[p >> 1]) {swap(p, p >> 1); urc(p >> 1);}
}

void cobor(int p)
{
	int m, st, dr;
	m = p; st = m << 1; dr = st + 1;

	if (st <= K) if (h[m] > h[st]) m = st;
	if (dr <= K) if (h[m] > h[dr]) m = dr;

	if (m != p)
	{
		swap(p, m);
		cobor(m);
	}
}

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

	scanf("%d",&N);
	int i, x;

	for (i = 1; i <= N; i++)
	{
		scanf("%d", &x);
		h[++K] = x;
		urc(K);
	}

	while (K)
	{
		printf("%d ",h[1]);
		swap(1, K);
		K--;
		cobor(1);
	}
	return 0;
}