Cod sursa(job #2943023)

Utilizator CipriEuCruceanu Ciprian Constantin CipriEu Data 20 noiembrie 2022 14:30:40
Problema Sortare prin comparare Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.83 kb
#include <fstream>
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
ifstream fin("algsort.in");
ofstream fout("algsort.out");
int n, x;
vector<int> heap;
const int inf = 0x3F3F3F3F;
void heapify(int root){
    int l = 2*root+1;
    int r = 2*root+2;
    int minim = root;
    if(l<heap.size() && heap[l] < heap[minim]) minim = l;
    if(r<heap.size() && heap[r] < heap[minim]) minim = r;
    if(minim != root){
        swap(heap[root], heap[minim]);
        heapify(minim);
    }
}
int main(){
    fin>>n;
    for(int i=1; i<=n; i++){
        fin>>x;
        heap.push_back(x);
    }
    for(int i = (heap.size()-1)/2; i>=0; i--) heapify(i);
    while(heap.size()){
        fout<<heap[0]<<" ";
        swap(heap[0], heap[heap.size()-1]);
        heap.pop_back();
        heapify(0);
    }
}