Cod sursa(job #2868599)

Utilizator cyg_vladioanBirsan Vlad cyg_vladioan Data 11 martie 2022 01:20:27
Problema Sortare prin comparare Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.25 kb
#include <fstream>
#include <vector>
const int NMAX = 500000;

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

void merge(std::vector<int>& v, int st, int mij, int dr){
    int i;
    std::vector<int> a, b;
    for(i = mij; i >= st; -- i)
        a.push_back(v[i]);
    for(i = dr; i >= mij + 1; -- i)
        b.push_back(v[i]);
    i = st;
    while(a.size() > 0 && b.size() > 0){
        if(a[a.size() - 1] <= b[b.size() - 1]){
            v[i ++] = a[a.size() - 1];
            a.pop_back();
        } else {
            v[i ++] = b[b.size() - 1];
            b.pop_back();
        }
    }
    while(a.size()){
        v[i ++] = a[a.size() - 1];
        a.pop_back();
    }
    while(b.size()){
        v[i ++] = b[b.size() - 1];
        b.pop_back();
    }
}

void merge_sort(std::vector<int>& v, int st, int dr){
    if(st >= dr)
        return;
    int mij = st + (dr - st) / 2;
    merge_sort(v, st, mij);
    merge_sort(v, mij + 1, dr);
    merge(v, st, mij, dr);
}

int main(){
    int n, i, x;
    std::vector<int> v;

    f >> n;
    for(i = 0; i < n; i ++){
        f >> x;
        v.push_back(x);
    }

    merge_sort(v, 0, n - 1);

    for(auto x: v)
        g << x << " ";
    return 0;
}