Cod sursa(job #2618783)

Utilizator ADINAIOANA-BORTAAdina Borta ADINAIOANA-BORTA Data 26 mai 2020 00:23:19
Problema Sortare prin comparare Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.38 kb
#include <iostream>
#include <vector>
#include <fstream>

void Merge(std::vector<int>& v, int st, int dr)
{
    int i, j, k, n, m;

    int mij = st + (dr - st) / 2;

    n = (mij - st) + 1;
    m = (dr - mij);

    std::vector<int> vst, vdr;

    for (i = 0; i < n; i++)
        vst.push_back(v[st + i]);
    for (j = 0; j < m; j++)
        vdr.push_back(v[mij + j + 1]);

    i = 0; j = 0; k = st;

    while (i < n && j < m)
    {
        if (vst[i] < vdr[j])
        {
            v[k] = vst[i];
            i++;
        }
        else
        {
            v[k] = vdr[j];
            j++;
        }
        k++;
    }

    while (i < n)
    {
        v[k] = vst[i];
        i++;
        k++;
    }

    while (j < m)
    {
        v[k] = vdr[j];
        j++;
        k++;
    }


}

void MergeSort(std::vector<int>& v, int st, int dr)
{
    if (st >= dr)
        return;

    int mij = st + (dr - st) / 2;
    MergeSort(v, st, mij);
    MergeSort(v, mij + 1, dr);
    Merge(v, st, dr);

}


int main()
{
    int n, x;
    std::vector<int> sir;
    std::ifstream in("algsort.in");
    std::ofstream out("algsort.out");

    in >> n;

    for (int i = 0; i < n; i++) {
        in >> x;
        sir.push_back(x);
    }

    MergeSort(sir, 0, n-1);

    for (int i = 0; i < n; i++) {
        out << sir[i]<<" ";
    }
}