Pagini recente » Cod sursa (job #6254) | Cod sursa (job #1699513) | Cod sursa (job #2812326) | Cod sursa (job #874441) | Cod sursa (job #3124278)
/*
* Lefter Sergiu - 27/04/2023
*/
#include <fstream>
using namespace std;
ifstream in("algosort.in");
ofstream out("algosort.out");
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() {
in >> n;
for (int i = 1; i <= n; ++i) {
in >> h[i];
}
nh = n;
//transform in 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--; //stergem varful heap-ului
coboara(1);
}
for (int i = 1; i <= n; ++i) {
out << h[i] << " ";
}
in.close();
out.close();
return 0;
}