Cod sursa(job #243174)

Utilizator silvia_the_bestSilvia Pripoae silvia_the_best Data 12 ianuarie 2009 10:47:16
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.71 kb
#include <cstdio>
#define N 500010
int n,v[N];
void read()
{
	freopen("algsort.in","r",stdin);
	scanf("%d",&n);
	for (int i=1;i<=n;++i)
		scanf("%d",&v[i]);
}
void swap(int i,int j)
{
	int x;
	x=v[i];
	v[i]=v[j];
	v[j]=x;
}
void down_heap(int i,int n,int v[])
{
	int j=i;
	if (2*i<=n&&v[j]<v[2*i])
		j=2*i;
	if (2*i+1<=n&&v[j]<v[2*i+1])
		j=2*i+1;
	if (i!=j)
	{
		swap(i,j);
		down_heap(j,n,v);
	}
}
void solve()
{
	for (int i=n/2;i>=1;--i)
		down_heap(i,n,v);
	for (int i=n;i>=1;--i)
	{
		swap(1,i);
		down_heap(1,i-1,v);
	}
}
void write()
{
	freopen("algsort.out","w",stdout);
	for (int i=1;i<n;++i)
		printf("%d ",v[i]);
}
int main()
{
	read();
	solve();
	write();
}