Cod sursa(job #2739260)

Utilizator MihaelaDanilaDanila Mihaela MihaelaDanila Data 7 aprilie 2021 13:41:33
Problema Sortare prin comparare Scor 40
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.33 kb
#include <iostream>
#include <algorithm>
#include <vector>
#include <fstream>

using namespace std;

ifstream f("algsort.in");
ofstream g("algsort.out");

void coboara(vector<int> &v, int poz){
    int fiu_dreapta, fiu_stanga;
    fiu_dreapta = 2*poz+2;
    fiu_stanga = 2*poz+1;
    if(fiu_stanga < v.size() && v[fiu_stanga] < v[poz]){
            swap(v[poz],v[fiu_stanga]);
            coboara(v,fiu_stanga);
    }
    if(fiu_dreapta < v.size() && v[fiu_dreapta] < v[poz]){
            swap(v[poz],v[fiu_dreapta]);
            coboara(v,fiu_dreapta);
    }
}

void heapSort(vector<int> &v){
    vector<int> result;
    for (int i = v.size()/2-1; i>=0; i--){
        coboara(v, i);
    }
    int i;
    int n = v.size();
    for(i=0; i<n; i++){
        swap(v[0],v.back());
        result.push_back(v.back());
        v.pop_back();
        coboara(v, 0);
    }
    for(i=0;i<result.size();i++){
        v.push_back(result[i]);
    }
}

void print(vector<int> &v){
    vector<int>::const_iterator i;
    for(i=v.begin();i!=v.end();++i){
        g<<*i<<" ";
    }
    g<<'\n';
}

int main(){
    int length,x;
    vector<int> v;
    vector<int>::const_iterator i;
    f>>length;
    while(length>0){
        f>>x;
        length--;
        v.push_back(x);
    }
    heapSort(v);
    print(v);
}