Cod sursa(job #690219)

Utilizator mihaiAgapeMihai Agape mihaiAgape Data 25 februarie 2012 13:32:51
Problema Sortare prin comparare Scor 100
Compilator c Status done
Runda Arhiva educationala Marime 0.87 kb
#include <stdio.h>
#define NMAX 500005

#define FILE "algsort"
#define parent(t)(t>>1)
#define left(t)(t<<1)
#define right(t)(left(t)+1)
#define swap(a,b)(a^=b^=a^=b)

int num[NMAX],N;

void heapify(int node, int N)
{
	int l=left(node),r=right(node),maxP;

	if(l<=N&&num[l]>=num[node])
		maxP=l;
	else
		maxP=node;
	if(r<=N&&num[r]>=num[maxP])
		maxP=r;

	if(maxP!=node)
		swap(num[node],num[maxP]),
		heapify(maxP,N);
}

void buildHeap(int N)
{
	int i;

	for(i=N/2;i>0;i--)
		heapify(i,N);
}

void heapsort()
{
	int i;

	for(i=N;i>1;i--)
	{
		swap(num[1],num[i]);
		heapify(1,i-1);
	}
}

int main()
{
	int i;

	freopen(FILE ".in","r",stdin);
	freopen(FILE ".out","w",stdout);

	scanf("%d",&N);
	for(i=1;i<=N;i++)
		scanf("%d",&num[i]);

	buildHeap(N);
	heapsort();

	for(i=1;i<=N;i++)
		printf("%d ",num[i]);

	return 0;
}