Cod sursa(job #1022783)

Utilizator Simona13Simona Mihalca Simona13 Data 5 noiembrie 2013 22:32:20
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.95 kb
#include<iostream>
#include<fstream>
using namespace std;
typedef int Heap[500001];

inline int father(int nod)
{return nod/2;
}

inline int left_son(int nod)
{return nod*2;
}

inline int right_son(int nod)
{return nod*2+1;
}

void sift(Heap H, int N, int K)
{
	int son;
	do
		{son=0;
		if(left_son(K)<=N)
			{son=left_son(K);
			if(right_son(K)<=N && H[right_son(K)]>H[left_son(K)])
				son=right_son(K);
			if(H[son]<=H[K])
				son=0;
			}
		if(son)	
			{swap(H[K], H[son]);
			K=son;
			}
		}while(son);
}

void build_heap(Heap H, int N)
	{for(int i=N/2;i>0;--i)
		sift(H,N,i);
	}
	
void heapsort (Heap H, int N)	
	{build_heap(H,N);
	for(int i=N;i>=2;--i)
		{swap(H[1],H[i]);
		sift(H,i-1,1);
		}
	}
	
int main()	
{Heap H;
int N,i;
ifstream f("algsort.in");
f>>N;
for(i=1;i<=N;i++)
	f>>H[i];
f.close();
heapsort(H,N);
ofstream g("algsort.out");
for(i=1;i<=N;i++)
	g<<H[i]<<" ";
g.close();
return 0;

}