Pagini recente » Cod sursa (job #1683908) | Cod sursa (job #1549031) | Cod sursa (job #2089519) | Cod sursa (job #1636445) | Cod sursa (job #2757027)
#include <fstream>
using namespace std;
ifstream in ("algsort.in");
ofstream out ("algsort.out");
int nh, n;
const int N = 500001;
int v[N];
void urca(int p) {
while(p > 1 && v[p] > v[p / 2]) {
swap(v[p], v[p / 2]);
p /= 2;
}
}
void adauga(int val) {
v[++nh] = val;
urca(nh);
}
void coboara(int p) {
int fs = 2 * p;
int fd = 2 * p + 1;
int bun = p;
if(fs <= nh && v[fs] > v[bun]) {
bun = fs;
}
if(fd <= nh && v[fd] > v[bun]) {
bun = fd;
}
if(bun != p) {
swap(v[bun], v[p]);
coboara(bun);
}
}
void output() {
for(int i = 1; i <= n; i++) {
out << v[i] << " ";
}
return;
}
int main() {
in >> n;
nh = 0;
for(int i = 1; i <= n; i++) {
int aux;
in >> aux;
adauga(aux);
}
for(int i = n; i >= 1; i--) {
swap(v[1], v[i]);
nh--;
coboara(1);
}
output();
return 0;
}