Cod sursa(job #1311184)

Utilizator radudorosRadu Doros radudoros Data 7 ianuarie 2015 20:23:07
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.93 kb
#include <fstream>
#define NMAX 500001

using namespace std;

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


int parent(int i)
{return i / 2;}

int left(int i)
{return 2 * i;}

int right(int i)
{
	return 2 * i + 1;
}

void heapify(int* v,int i,int n)
{
	int l = left(i);
	int r = right(i);
	int min = i;
	if (l <= n&& v[l]<v[i])
	{
		min = l;
	}
	if (r <= n && v[r] < v[min])
	{
		min = r;
	}
	if (i != min)
	{
		int aux = v[min];
		v[min] = v[i];
		v[i] = aux;
		heapify(v, min, n);
	}
}

void build(int *v,int n)
{
	for (int i = n / 2; i >= 1; i--)
	{
		heapify(v, i, n);
	}
}

void heapsort(int*v, int n)
{
	for (int i = 1; i <= n; i++)
	{
		fout << v[1]<<' ';
		int aux = v[n-i+1];
		v[n-i+1] = v[1];
		v[1] = aux;
		heapify(v, 1, n - i);
	}
}

int main()
{
	int v[NMAX];
	int n;
	fin >> n;
	for (int i = 1; i <= n; i++)
		fin >> v[i];
	build(v, n);
	heapsort(v, n);
}