Pagini recente » Cod sursa (job #595611) | Cod sursa (job #2790256) | Cod sursa (job #3224035) | Cod sursa (job #1095888) | Cod sursa (job #3124275)
#include <fstream>
using namespace std;
const int N = 5e5;
int n, nh, h[N+1];
void coboara(int p)
{
int fs = 2 * p, fd = 2 * p + 1, bun = p;
if (fs <= nh && h[fs] > h[bun])
{
bun = fs;
}
if (fd <= nh && h[fd] > h[bun])
{
bun = fd;
}
if (bun != p)
{
swap(h[p], h[bun]);
coboara(bun);
}
}
int main()
{
ifstream in("algsort.in");
ofstream out("algsort.out");
in >> n;
for (int i = 1; i <= n; i++)
{
in >> h[i];
}
nh = n;
///transform h intr-un maxheap
for (int i = n / 2; i >= 1; i--)
{
coboara(i);
}
///mutam repetat maximul la final
for (int i = n; i > 1; i--)
{
swap(h[1], h[i]);
nh--;///am sters varful heap-ului
coboara(1);
}
for (int i = 1; i <= n; i++)
{
out << h[i] << " ";
}
in.close();
out.close();
return 0;
}