Pagini recente » Cod sursa (job #2350393) | Cod sursa (job #3289794) | Cod sursa (job #1302708) | Cod sursa (job #2351904) | Cod sursa (job #2636607)
#include <fstream>
#include <iostream>
#define NMAX 500005
using namespace std;
std::ifstream fin("algsort.in");
std::ofstream fout("algsort.out");
int v[NMAX], n;
void swap(int& a, int& b) {
int aux = a;
a = b;
b = aux;
}
void heapify(int i) {
int min = i, left = 2 * i, right = 2 * i + 1;
if (left <= n && v[left] < v[min])
min = left;
if (right <= n && v[right] < v[min])
min = right;
if (min == i) return;
swap(v[i], v[min]);
heapify(min);
}
void heapSort() {
for (int i = n / 2;i >= 1;--i)
heapify(i);
int m = n;
for (int i = 1;i <= m;++i) {
fout << v[1] << ' ';
swap(v[1], v[n--]);
heapify(1);
}
}
int main() {
std::ios::sync_with_stdio(false);
fin >> n;
for (int i = 1;i <= n;++i)
fin >> v[i];
heapSort();
return 0;
}