Cod sursa(job #371885)

Utilizator loginLogin Iustin Anca login Data 7 decembrie 2009 17:50:46
Problema Sortare prin comparare Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 0.85 kb
# include <fstream>
using namespace std;
int n, h[500002], v[500002];
ofstream fout ("algsort.out");

void promoveaza (int k)
{
	int eh=0;
	while (k/2 && !eh)
		if (v[h[k/2]]<=v[h[k]])
			eh=1;
		else
		{
			int aux=h[k/2];
			h[k/2]=h[k], h[k]=aux;
			k/=2;
		}
}

void cerne (int k, int n)
{
	int i, eh=0;
	while (!eh && 2*k<=n)
	{
		i=2*k;
		if (i+1<=n && v[h[i+1]]<v[h[i]])
			i=i+1;
		if (v[h[k]]<=v[h[i]])
			eh=1;
		else
		{
			int aux=h[k];
			h[k]=h[i], h[i]=aux;
			k=i;
		}
	}
}

void read ()
{
	int i;
	ifstream fin ("algsort.in");
	fin>>n;
	for (i=1;i<=n;i++)
	{
		fin>>v[i], h[i]=i;
		promoveaza(i);
	}
}

void afis (int k)
{
	int i;
	for (i=k;i>0;i--)	
		fout<<v[h[i]]<<" ";
	fout<<endl;
}

void hs (int n)
{
	int aux;
	for (;n>1;)
	{	
		aux=h[1], h[1]=h[n], h[n]=aux;
		n--;
		cerne(1, n);
	}
}

int main ()
{
	read ();
	hs (n);
	afis (n);
	return 0;
}