Pagini recente » Monitorul de evaluare | Cod sursa (job #231346) | Cod sursa (job #1460140) | Rating Parker Wood (gasengineer828) | Cod sursa (job #2009938)
#include <iostream>
#include <fstream>
using namespace std;
ifstream in("algsort.in");
ofstream out("algsort.out");
#define ll long long
#define ull unsigned long long
#define pb push_back
const int NMax = 5e5 + 5;
const int sqMax = 320 + 5;
int N;
int v[NMax];
void heapsort();
void sift(int,int);
void buildHeap();
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]<<' ';
}
out<<'\n';
in.close();out.close();
return 0;
}
void heapsort() {
buildHeap();
for (int i=N;i>1;--i) {
swap(v[1],v[i]);
sift(1,i-1);
}
}
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>0;--i) {
sift(i,N);
}
}