Cod sursa(job #1415876)

Utilizator ArkinyStoica Alex Arkiny Data 6 aprilie 2015 19:01:07
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.82 kb
#include<fstream>
using namespace std;
#define MAX 500001
unsigned int H[MAX],N,el,M=0,k,child,i;

int main()
{
	 ifstream in("algsort.in");
	 ofstream out("algsort.out");
	 in>>N;
	 for(i=1;i<=N;i++)
	 {
		 in>>el;
		 if(M==0)
			 H[++M]=el;
		 else
		 {
			 H[++M]=el;
			 k=M;
			 while(k>0 && H[k]<H[k/2])
			 {
				 swap(H[k],H[k/2]);
				 k=k/2;
			 }
		 }
	 }

	 for(i=1;i<=N;i++)
	 {
		 out<<H[1]<<" ";
		 swap(H[1],H[M]);
		 --M;
		 k=1;
		 do
		 {
			child =0;
			if(2*k<=M)
			{
				if(H[2*k]<H[k])
					child=2*k;
				if(2*k+1<=M && H[2*k+1]<H[k])
				{
					if(child==0)
						child=2*k+1;
					else
						if(H[2*k+1]<H[child])
							child=2*k+1;
				}
				 if(child)
				 {
					 swap(H[k],H[child]);
					 k=child;
				 }
			}
		 }while(child);
	 }

	return 0;
}