Cod sursa(job #2935617)

Utilizator MihaiZ777MihaiZ MihaiZ777 Data 7 noiembrie 2022 09:54:31
Problema Sortare prin comparare Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.22 kb
#include <iostream>
#include <fstream>
using namespace std;

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

int n;
int v[500005];
int mrg[500005];


void mergeArr(int v[], int lf, int rg, int mid)
{
    int a1 = lf;//a = lf
    int a2 = mid;
    int b1 = mid + 1;//b = rg
    int b2 = rg;

    for (int i = lf; i <= rg; i++)
    {
        if ((a1 <= a2 && v[a1] <= v[b1]) || b1 > b2)
        {
            mrg[i] = v[a1];
            a1++;
        }
        else
        {
            mrg[i] = v[b1];
            b1++;
        }
    }

    for (int i = lf; i <= rg; i++)
    {
        v[i] = mrg[i];
    }
}


void mergeSort(int v[], int lf, int rg)
{
    if (lf == rg)
    {
        return;
    }
    if (lf + 1 == rg)
    {
        if (v[lf] > v[rg])
        {
            swap(v[lf], v[rg]);
        }
        return;
    }

    int mid = (lf + rg) / 2;

    mergeSort(v, lf, mid);
    mergeSort(v, mid + 1, rg);

    mergeArr(v, lf, rg, mid);
}


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

    mergeSort(v, 1, n);

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