Cod sursa(job #2859535)

Utilizator federicisFedericis Alexandru federicis Data 1 martie 2022 15:47:56
Problema Sortare prin comparare Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.33 kb
#include <iostream>

using namespace std;

void Merge(unsigned long long* arr, unsigned long long l,unsigned long long m,unsigned long long r)
{ cout <<".";
    unsigned long long  p1 = l, p2 = m + 1, sec[500001], cnt = 0;

    while(p1 != m + 1 && p2 != r + 1)
    {
        if(arr[p1] <= arr[p2])
        {
            sec[cnt] = arr[p1];
            p1++;
        }
        else
        {
            sec[cnt] = arr[p2];
            p2++;
        }
        cnt++;
    }
    unsigned long long x = 0;
    while(p1 < m + 1)
    {
        arr[cnt + x] = arr[p1];
        x++;
        p1++;
    }
    while(p2 < r + 1)
    {
        arr[cnt + x] = arr[p2];
        x++;
        p2++;
    }
    for(int i = 0; i < cnt; i++)
    {
        arr[l + i] = sec[i];
    }
}

void MergeSort(unsigned long long* arr, unsigned long long l, unsigned long long r)
{
    unsigned long long m = (l + r)/2;
    if(l < r)
    {
        cout << ":";
        MergeSort(arr, l, m);
        MergeSort(arr, m + 1, r);
        cout << "?";
        Merge(arr, l, m, r);
    }
}

unsigned long long v[10], n;

int main()
{

    cin >> n;
    for(int i = 1; i <= n; i++)
    {
        cin >> v[i];
    }
    MergeSort(v, 1, n);
    for(int i = 1; i <= n; i++)
    {
        cout << v[i] << " ";
    }
    return 0;
}