Cod sursa(job #2898293)

Utilizator 0SiSBesliu Radu-Stefan 0SiS Data 6 mai 2022 16:14:14
Problema Sortare prin comparare Scor 80
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.3 kb
#include <iostream>
#include <vector>
#include <algorithm>
#include <fstream>

using namespace std;

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

vector < int > merge(vector < int > a, vector < int > b) {
    vector < int > c;
    int i = 0;
    int j = 0;
    int n = a.size();
    int m = b.size();
    while (i < n && j < m) {
        if (a[i] > b[j]) {
            c.emplace_back(b[j]);
            ++j;
        }
        else {
            c.emplace_back(a[i]);
            ++i;
        }
    }

    while (i < n) {
        c.emplace_back(a[i]);
        ++i;
    }

    while (j < m) {
        c.emplace_back(b[j]);
        ++j;
    }

    return c;
}

vector < int > merge_sort(vector < int > v) {
    if (v.size() == 1) return v;
    vector < int > v1;
    vector < int > v2;
    for (auto it = v.begin(); it != v.begin() + v.size() / 2; ++it) {
        v1.emplace_back(*it);
    }
    for (auto it = v.begin() + v.size() / 2; it != v.end(); ++it) {
        v2.emplace_back(*it);
    }

    v1 = merge_sort(v1);
    v2 = merge_sort(v2);

    return merge(v1, v2);
}

int n;

int main() {
    f >> n;
    vector < int > v(n);
    for (auto &it : v) {
      f >> it;
    }
    v = merge_sort(v);
    for (auto &it : v) {
        g << it << " ";
    }
}