Cod sursa(job #795662)

Utilizator radustn92Radu Stancu radustn92 Data 9 octombrie 2012 11:40:41
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.76 kb
#include <stdio.h>
#define NMAX 500005
int n,A[NMAX],r;
void change(int x,int y)
{
	int aux=A[x];
	A[x]=A[y]; A[y]=aux;
}
void up(int poz)
{
	while (poz>1 && A[poz/2]>A[poz])
	{
		change(poz,poz/2);
		poz/=2;
	}
}
void down(int poz)
{
	if ((2*poz<=r && A[2*poz]<A[poz]) || (2*poz+1<=r && A[2*poz+1]<A[poz]))
	{
		int best_poz=2*poz;
		if (2*poz+1<=r && A[2*poz+1]<A[best_poz])
			best_poz=2*poz+1;
		change(poz,best_poz);
		down(best_poz);
	}
}
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);
		A[++r]=x;
		up(r);
	}
	for (i=1; i<=n; i++)
	{
		printf("%d ",A[1]);
		A[1]=A[r]; r--;
		down(1);
	}
	printf("\n");
	return 0;
}