Cod sursa(job #319507)

Utilizator AndreiDDiaconeasa Andrei AndreiD Data 31 mai 2009 21:47:57
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.07 kb
#include <cstdio>

#define file_in "algsort.in"
#define file_out "algsort.out"

#define Nmax 500100

int n,v[Nmax];

inline void insert_heap(int n, int x)
{
	int fiu=++n;
    int tata=n>>1;
	while(tata && v[tata]<x)
	{
		v[fiu]=v[tata];
		fiu=tata;
		tata=fiu>>1;
	}
	v[fiu]=x;
}
	
inline void creare_heap()
{
	int i;
	for (i=2;i<=n;++i)
		 insert_heap(i-1,v[i]);
}

inline void comb_heap(int i, int n)
{
	int h=v[i];
	int tata=i;
	int fiu=i*2;
	while (fiu<=n)
	{
		if (fiu<n)
		    if (v[fiu]<v[fiu+1])
				 fiu++;
		if (h<v[fiu])
		{
			v[tata]=v[fiu];
			tata=fiu;
			fiu*=2;
		}
		else
			fiu=n+1;
	}
	v[tata]=h;
}
			

inline void heapsort()
{
	int i,aux;
	creare_heap();
	for (i=n;i>1;--i)
	{
		aux=v[1];
		v[1]=v[i];
		v[i]=aux;
		comb_heap(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", &v[i]);
	heapsort();
	for (i=1;i<=n;++i)
		 printf("%d ", v[i]);
	
	fclose(stdin);
	fclose(stdout);
	
	return 0;
}