Pagini recente » Cod sursa (job #1722606) | Cod sursa (job #401532) | Cod sursa (job #2775889) | Cod sursa (job #924499) | Cod sursa (job #936466)
Cod sursa(job #936466)
#include <algorithm>
#include <fstream>
#include <iostream>
#include <vector>
using namespace std;
ifstream fin("algsort.in");
ofstream fout("algsort.out");
int N;
vector<int> v;
int heap_size = 0;
void heap_sort();
void make_heap();
void sift(int node);
int main() {
fin >> N;
v.resize(N + 1);
for (int i = 1; i <= N; ++i) {
fin >> v[i];
}
heap_sort();
for (int i = 1; i <= N; ++i) {
fout << v[i] << ' ';
}
return 0;
}
void heap_sort() {
make_heap();
while (heap_size > 1) {
swap(v[1], v[heap_size]);
--heap_size;
sift(1);
}
}
void make_heap() {
heap_size = N;
for (int i = heap_size / 2; i > 0; --i) {
sift(i);
}
}
void sift(int node) {
int l = node * 2;
int r = l + 1;
int son = node;
if (l <= heap_size) son = l;
if (r <= heap_size && v[r] > v[l] ) {
son = r;
}
if (v[son] > v[node]) {
swap(v[son], v[node]);
sift(son);
}
}