Pagini recente » Cod sursa (job #2113130) | Cod sursa (job #360592) | Cod sursa (job #926385) | Cod sursa (job #452610) | Cod sursa (job #1978691)
#include <iostream>
#include <fstream>
#include <deque>
#include <vector>
#include <queue>
using namespace std;
ifstream in("sortare.in");
ofstream out("sortare.out");
#define pb push_back
#define ll long long
const int NMax = 5e5 + 5;
const int inf = 1e9 + 5;
int N;
int v[NMax];
void heapsort();
void buildHeap();
void sift(int,int);
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 buildHeap() {
for (int i=N/2;i > 0;--i) {
sift(i,N);
}
}
void sift(int node,int lim) {
int son = 0;
do {
son = 0;
int fs = 2*node,
ss = 2*node + 1;
if (fs <= lim) {
son = fs;
if (ss <= lim && v[ss] > v[son]) {
son = ss;
}
}
if (son && v[son] > v[node]) {
swap(v[son],v[node]);
node = son;
}
else {
son = 0;
}
}
while (son);
}