Cod sursa(job #2530459)

Utilizator CristyXtremeSimion Cristian CristyXtreme Data 24 ianuarie 2020 20:22:06
Problema Sortare prin comparare Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.16 kb
#include <iostream>
#include <fstream>
#include <vector>

using namespace std;

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

void interclaseaza(vector <int> &a, int st, int m, int dr) {
    int i = st, j = m + 1;
    vector <int> aux;
    while (i <= m && j <= dr) {
        if (a[i] < a[j]) {
            aux.push_back(a[i]);
            i++;
        }
        else {
            aux.push_back(a[j]);
            j++;
        }
    }
    while (i <= m) {
        aux.push_back(a[i]);
        i++;
    }
    while (j <= dr) {
        aux.push_back(a[j]);
        j++;
    }

    for (i = st; i <= dr; i++) {
        a[i] = aux[i - st];
    }
}

void mergesort(vector <int> &a, int st, int dr) {
    if (st >= dr) {
        return;
    }

    int m = st + (dr - st) / 2;
    mergesort(a, st, m);
    mergesort(a, m + 1, dr);

    interclaseaza(a, st, m, dr);
}

int main() {
    int n;
    in >> n;
    vector <int> a(n);
    for (int i = 0; i < n; i++) {
        in >> a[i];
    }

    mergesort(a, 0, n - 1);
    for (int i = 0; i < n; i++) {
        out << a[i] << ' ';
    }
    out << '\n';
    return 0;
}