Cod sursa(job #2651983)

Utilizator mvcl3Marian Iacob mvcl3 Data 23 septembrie 2020 22:52:41
Problema Sortare prin comparare Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.98 kb
#include <fstream>
#include <vector>



void heapify(std::vector<int>& v, const int& n, int i)
{
	int largest = i;
	int left = i * 2 + 1;
	int right = i * 2 + 2;
	
	if (left < n && v[left] > v[largest])
	{
		largest = left;
	}
	if (right < n && v[right] > v[largest])
	{
		largest = right;
	}

	if (largest != i)
	{
		std::swap(v[i], v[largest]);
		heapify(v, n, largest);
	}
}

void buildHeap(std::vector<int>& v, const int& n)
{
	for (int i = (n - 1) / 2; i >= 0; --i)
	{
		heapify(v, n, i);
	}
}

void sort(std::vector<int>& v, const int& n)
{
	buildHeap(v, n);
	for (int i = n - 1; i >= 0; --i)
	{
		std::swap(v[i], v[0]);
		heapify(v, i, 0);
	}
}


int main()
{
	std::ifstream in("algsort.in");

	int n;
	in >> n;
	std::vector<int> v(n);
	for (int i = 0; i < n; ++i)
	{
		in >> v[i];
	}

	sort(v, n);

	std::ofstream out("algsort.out");
	for (int i = 0; i < n; ++i)
	{
		out << v[i] << ' ';
	}
	out << std::endl;

	return 0;
}