Pagini recente » Cod sursa (job #2888437) | Cod sursa (job #1363077) | Cod sursa (job #2646336) | Cod sursa (job #1996077) | Cod sursa (job #1996623)
#include <iostream>
#include <fstream>
#include <unordered_map>
#include <algorithm>
#include <stack>
#include <cstring>
using namespace std;
ifstream in("algsort.in");
ofstream out("algsort.out");
const int NMax = 5e5 + 5;
int N;
int v[NMax];
void heapSort();
int main() {
in>>N;
for (int i=1;i <= N;++i) {
in>>v[i];
}
heapSort();
for (int i=1;i <= N;++i) {
out<<v[i]<<' ';
}
in.close();out.close();
return 0;
}
void sift(int node,int lim) {
int son = 0;
do {
son = 0;
int fs = node<<1, ss = fs + 1;
if (fs <= lim) {
son = fs;
if (ss <= lim && v[ss] > v[fs]) {
son = ss;
}
}
if (son && v[son] > v[node]) {
swap(v[son],v[node]);
node = son;
}
else {
son = 0;
}
}
while (son);
}
void buildHeap() {
for (int i=N/2; i ;--i) {
sift(i,N);
}
}
void heapSort() {
buildHeap();
/*
for (int i=1; i<= N;++i) {
cout<<v[i]<<' ';
}
*/
int i = N;
while (i > 1) {
swap(v[1],v[i]);
--i;
sift(1,i);
}
}