Cod sursa(job #827585)

Utilizator IoannaPandele Ioana Ioanna Data 2 decembrie 2012 12:33:49
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.93 kb
#include<fstream>
#include<vector>

using namespace std;

int n;
vector <int> h;

ifstream in("algsort.in");
ofstream out("algsort.out");

void upHeap(int k)
{
	int aux;
	if ((k>>1)==0)
		return ;
	if (h[k>>1]>h[k])
	{
		aux=h[k];
		h[k]=h[k>>1];
		h[k>>1]=aux;
		upHeap(k>>1);
	}
}

void solve()
{
	int a;
	h.push_back(0);
	for (int i=1;i<=n;i++)
	{
		in>>a;
		h.push_back(a);
		h[0]++;
		upHeap(h[0]);

	}
}

void downHeap(int k)
{
	int aux,fs,fd;
	fs=k<<1;
	fd=(k<<1)+1;
	if (fd<=h[0])
	{
		if (h[fd]<h[fs] && h[fd]<h[k])
		{
			aux=h[k];
			h[k]=h[fd];
			h[fd]=aux;
			downHeap(fd);
			return ;
		}
	}
	if (fs<=h[0] && h[fs]<h[k])
	{
		aux=h[k];
		h[k]=h[fs];
		h[fs]=aux;
		downHeap(fs);
		return ;
	}
}

void print()
{
	while (h[0])
	{
		out<<h[1]<<" ";
		h[1]=h[h[0]];
		h[0]--;
		downHeap(1);
	}
	out<<"\n";
}
int main()
{
	in>>n;
	solve();
	print();
	return 0;
}