Cod sursa(job #587654)

Utilizator blustudioPaul Herman blustudio Data 5 mai 2011 15:30:58
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.16 kb
#include <fstream>
using namespace std;

unsigned long int v[500001];
unsigned long int n;
unsigned long int mleft, mright, largest, he, temp, hs;

inline void read()
{
	ifstream fin("algsort.in");
	fin >> n;
	for(unsigned long long int i=1; i<=n; i++)
	{
		fin >> v[i];
	}
	fin.close();
}
inline void write()
{
	ofstream fout("algsort.out");
	for(unsigned long long int i=1; i<=n; i++)
	{
		fout << v[i] << " ";
	}
	fout.close();
}
void heapify()
{
	mleft = he*2;
	mright = mleft+1;
	if(mleft <= hs && v[mleft] > v[he])
		largest = mleft;
	else
		largest = he;
	if(mright <= hs && v[mright] > v[largest])
		largest = mright;
	if(largest != he)
	{
		temp = v[he];
		v[he] = v[largest];
		v[largest] = temp;
		he = largest;
		heapify();
	}
}
inline void makeheap()
{
	hs = n;
	for(unsigned long long int i=n/2; i>0; i--)
	{
		he = i;
		heapify();
	}
}
inline void heapsort()
{
	for(unsigned long long int i=n; i>1; i--)
	{
		temp = v[i];
		v[i] = v[1];
		v[1] = temp;
		hs--;
		he = 1;
		heapify();
	}
}
inline void solve()
{
	makeheap();
	heapsort();
}
int main()
{
	read();
	solve();
	write();
	return 0;
}