Pagini recente » Cod sursa (job #1779365) | Cod sursa (job #2345167) | Cod sursa (job #258669) | Cod sursa (job #1454716) | Cod sursa (job #2999116)
#include <bits/stdc++.h>
using namespace std;
ifstream f("algsort.in");
ofstream g("algsort.out");
const int N = 5e5 + 1;
int n, a, nh;
int gramada[N];
void urca(int p){
while(p > 1 && gramada[p] < gramada[p / 2]){
swap(gramada[p], gramada[p / 2]);
p /= 2;
}
}
void coboara(int p){
int fs = 2 * p, fd = 2 * p + 1, bun = p;
if(fs <= nh && gramada[fs] < gramada[bun])
bun = fs;
if(fd <= nh && gramada[fd] < gramada[bun])
bun = fd;
if(bun != p){
swap(gramada[p], gramada[bun]);
coboara(bun);
}
}
void adauga(int val){
gramada[++nh] = a;
urca(nh);
}
void popescu(){
g << gramada[1] << ' ';
swap(gramada[1], gramada[nh]);
nh--;
coboara(1);
}
int main(){
f >> n;
for(int i = 0; i < n; i++){
f >> a;
adauga(a);
}
f.close();
for(int i = n; i; i--)
popescu();
g.close();
}