Cod sursa(job #916680)

Utilizator radustn92Radu Stancu radustn92 Data 16 martie 2013 19:36:58
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.7 kb
#include <cstdio>
#include <algorithm>
#define NMAX 500005
using namespace std;
int n, A[NMAX], limN;

void go_down(int node)
{
	if (2 * node <= limN)
	{
		int minNode = 2 * node;
		if (2 * node + 1 <= limN && A[2 * node + 1] < A[minNode])
			minNode = 2 * node + 1;
		if (A[minNode] < A[node])
			swap(A[node], A[minNode]), go_down(minNode);
	} 
}

void cstr_heap()
{
	int i;
	for (i = n; i >= 1; i--)
		go_down(i);
}

int main()
{
	freopen("algsort.in", "r", stdin);
	freopen("algsort.out", "w", stdout);
	scanf("%d",&n);
	int i;
	for (i = 1, limN = n; i <= n; i++)
		scanf("%d",&A[i]);
	cstr_heap();
	
	for (i = 1; i <= n; i++)
	{
		printf("%d ",A[1]);
		A[1] = A[limN]; limN--;
		go_down(1);
	}
	return 0;
}