Cod sursa(job #2039404)

Utilizator robuvedVictor Robu robuved Data 14 octombrie 2017 15:34:40
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.8 kb
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
ifstream in("algsort.in");
ofstream out("algsort.out");
void PushDown(vector<int> &v, int n, int p)
{
	int x = -1;
	while (p != x)
	{
		x = p;
		int c = p;
		if (2 * p + 1 < n && v[2 * p + 1] > v[c]) c = 2 * p + 1;
		if (2 * p + 2 < n && v[2 * p + 2] > v[c]) c = 2 * p + 2;

		swap(v[c], v[p]);
		p = c;
	}
}
void maxHeapify(vector<int> & v)
{
	for (int i = (v.size() - 2) / 2; i >= 0; i--)
	{
		PushDown(v, v.size(), i);
	}
}
int main()
{
	int n;
	in >> n;
	vector<int> v(n);
	for (int i = 0; i < n; i++)
	{
		in >> v[i];
	}
	maxHeapify(v);
	for (int i = v.size() - 1; i >= 0; i--)
	{
		swap(v[i], v[0]);
		PushDown(v, i, 0);
	}
	for (int i = 0; i < v.size(); i++)
	{
		out << v[i] << ' ';
	}
}