Cod sursa(job #2906387)

Utilizator MoarcascosminMoarcas Cosmin Moarcascosmin Data 25 mai 2022 22:45:18
Problema Sortare prin comparare Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.06 kb
#include <iostream>
#include <vector>
#include <fstream>

using namespace std;

int n;
vector <unsigned> v;

void Citire() {
    ifstream f("algsort.in");
    f >> n;
    v.resize(n);

    for(int i = 0; i < n; i++)
        f >> v[i];
}

void Merge(int l, int m, int r) {
    vector<unsigned> aux;
    aux.resize(r - l + 1);

    int i1 = l, i2 = m + 1, k = 0;
    while(i1 <= m && i2 <= r) {
        if(v[i1] < v[i2])
            aux[k++] = v[i1++];
        else
            aux[k++] = v[i2++];
    }
    while(i1 <= m) {
        aux[k++] = v[i1++];
    }
    while(i2 <= r) {
        aux[k++] = v[i2++];
    }

    for(int i = 0; i < k; i++)
        v[l + i] = aux[i];
}

void MergeSort(int l, int r) {
    if(l < r) {
        int m = (l + r) / 2;
        MergeSort(l, m);
        MergeSort(m + 1, r);
        Merge(l, m, r);
    }
}

void Afisare() {
    ofstream g("algsort.out");
    for(int i = 0; i < n; i++)
        g << v[i] << ' ';
}

int main() {
    Citire();
    MergeSort(0, n - 1);
    Afisare();
    return 0;
}