Pagini recente » Cod sursa (job #1415420) | Cod sursa (job #1033986) | Cod sursa (job #470041) | Cod sursa (job #3181184) | Cod sursa (job #2039404)
#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] << ' ';
}
}