Cod sursa(job #1702183)

Utilizator bent_larsenSturzu Antonio-Gabriel bent_larsen Data 14 mai 2016 17:54:36
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.23 kb
#include <fstream>
#include <vector>
using namespace std;

inline int left(int index)
{
	return 2 * index + 1;
}

inline int right(int index)
{
	return 2 * index + 2;
}

void heapify(vector<int>& heap, const int index, const int dim)
{
	int i = index;
	while(i < dim)
	{
		int l = left(i);
		int r = right(i);
		
		int maxi = i;
		if(l < dim && heap[l] > heap[maxi])
		{
			maxi = l;
		}
		if(r < dim && heap[r] > heap[maxi])
		{
			maxi = r;
		}
		
		if(maxi == i)
		{
			break;
		}
		else
		{
			swap(heap[i], heap[maxi]);
		}
		i = maxi;
	}
}

void build_heap(vector<int>& v)
{
	int N = v.size();
	
	for(int i = N / 2 - 1;i >= 0;--i)
	{
		heapify(v, i, N);
	}
}

void heap_sort(vector<int>& v)
{
	build_heap(v);
	int N = v.size();
	int dim = v.size();
	
	for(int i = N - 1;i >= 1;--i)
	{
		swap(v[i], v[0]);
		--dim;
		heapify(v, 0, dim);
	}
}

int main()
{
	ifstream in("algsort.in");
	ofstream out("algsort.out");
	
	int N;
	in >> N;
	
	vector<int> v;
	for(int i = 0;i < N;++i)
	{
		int nr;
		in >> nr;
		v.push_back(nr);
	}
	
	heap_sort(v);
	for(int i = 0;i < N - 1;++i)
	{
		out<<v[i]<<" ";
	}
	out<<v[N - 1];
	out<<"\n";
	
	in.close();
	out.close();
}