Cod sursa(job #2610274)

Utilizator anacomoAna-Maria Comorasu anacomo Data 4 mai 2020 18:01:18
Problema Sortare prin comparare Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.33 kb
#include <fstream>
#include <vector>
using namespace std;

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

void Interclasare(vector<int> &v, int left, int right);
void mergeSort(vector<int> &v, int left, int right);

int main()
{
    int n, x;
    vector<int> v;
    // citesc vectorul
    fin >> n;
    for (size_t i = 0; i < n; i++)
    {
        fin >> x;
        v.push_back(x);
    }

    mergeSort(v, 0, n - 1);

    // afisez vectorul sortat
    for (size_t i = 0; i < n; i++)
        fout << v[i] << " ";
    return 0;
}

void mergeSort(vector<int> &v, int left, int right)
{
    if (left < right)
    {
        int middle = (left + right) / 2;
        mergeSort(v, left, middle);
        mergeSort(v, middle+1, right);
        Interclasare(v, left, right);
    }
}

void Interclasare(vector<int> &v, int left, int right)
{
    int middle = (left + right) / 2;
    int i = left, j = middle + 1;
    vector<int> w;
    while (i <= middle && j <= right)
        if (v[i] < v[j])
        {
            w.push_back(v[i]);
            i++;
        }
        else
        {
            w.push_back(v[j]);
            j++;
        }
    while (i < middle)
    {
        w.push_back(v[i]);
        i++;
    }
    while (j < right)
    {
        w.push_back(v[j]);
        j++;
    }
    for (i = left; i <= right; i++)
        v[i] = w[i - left];
}