Cod sursa(job #2723551)

Utilizator radu.millio15Radu Millio radu.millio15 Data 14 martie 2021 18:53:57
Problema Sortare prin comparare Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.12 kb
#include <bits/stdc++.h>
using namespace std;
ifstream fin("algsort.in");
ofstream fout("algsort.out");

void mergeHalves(vector<int> &v, int low, int high) {
    int mid = low + (high - low) / 2;
    int i = low;
    int j = mid + 1;
    vector<int> aux;

    while (i <= mid && j <= high) {
        if (v[i] < v[j]) {
            aux.push_back(v[i]);
            i++;
        } else {
            aux.push_back(v[j]);
            j++;
        }
    }

    while (i <= mid) {
        aux.push_back(v[i]);
        i++;
    }

    while (j <= high) {
        aux.push_back(v[j]);
        j++;
    }

    for (int i = low; i <= high; i++) {
        v[i] = aux[i - low];
    }
}

void mergeSort(vector<int> &v, int low, int high) {
    if (low < high) {
        int mid = low + (high - low) / 2;

        mergeSort(v, low, mid);
        mergeSort(v, mid + 1, high);
        mergeHalves(v, low, high);
    }
}

int main() {

    int n;
    fin >> n;
    vector<int> v;
    for (int i = 0, x; i < n; i++) {
        fin >> x;
        v.push_back(x);
    }
    mergeSort(v, 0, n - 1);
    for (int x : v) {
        fout << x << " ";
    }
    return 0;
}