Cod sursa(job #2744703)

Utilizator matthriscuMatt . matthriscu Data 24 aprilie 2021 23:25:51
Problema Sortare prin comparare Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.1 kb
#include <iostream>
using namespace std;

#define NMAX 500005

//long long total = 0;

void Merge(int left1, int right1, int left2, int right2, int *v) {
    int i = left1, j = left2, temp[NMAX], c = 0, c2 = 0;
    while(i <= right1 && j <= right2)
        if(v[i] <= v[j])
            temp[++c] = v[i++];
        else {
            temp[++c] = v[j++];
            //total += right1 - i + 1;
        }
    while(i <= right1)
        temp[++c] = v[i++];
    while(j <= right2)
        temp[++c] = v[j++];
    for(i = left1; i <= right2; ++i)
        v[i] = temp[++c2];
}

void MergeSort(int left, int right, int *v) {
    if(left < right) {
        int m = left + (right - left) / 2;
        MergeSort(left, m, v);
        MergeSort(m+1, right, v);
        Merge(left, m, m+1, right, v);
    }
}

int main() {
    freopen("algsort.in", "r", stdin);
    freopen("algsort.out", "w", stdout);
    int n, i, v[NMAX];
    cin >> n;
    for(i = 1; i <= n; ++i)
        cin >> v[i];
    MergeSort(1, n, v);
    //cout << total;
    for(i = 1; i <= n; ++i)
        cout << v[i] << ' ';
}