Cod sursa(job #3139867)

Utilizator andreipirjol5Andrei Pirjol andreipirjol5 Data 2 iulie 2023 12:28:20
Problema Sortare prin comparare Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.09 kb
#include <fstream>
#include <vector>

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

const int NMAX = 5 * (1e5) + 5;
int v[NMAX + 5];

void interclasare(int left, int right, int mid)
{
    int i = left, j = mid + 1;

    vector <int> vec;
    vec.clear();

    while(i <= mid and j <= right)
        if(v[i] <= v[j])
            vec.push_back(v[i++]);
        else
            vec.push_back(v[j++]);

    while(i <= mid)
        vec.push_back(v[i++]);

    while(j <= right)
        vec.push_back(v[j++]);

    for(int i = left; i <= right; i++)
        v[i] = vec[i - left];
}

void MergeSort(int left, int right)
{
    if(left < right)
    {
        int mid = (left + right) / 2;

        MergeSort(left, mid);
        MergeSort(mid + 1, right);
        interclasare(left, right, mid);
    }
}

int main()
{
    int n;
    fin >> n;
    for(int i = 1; i <= n; i++)
        fin >> v[i];

    MergeSort(1, n);

    for(int i = 1; i <= n; i++)
        fout << v[i] << ' ';

    fin.close();
    fout.close();
    return 0;
}