Cod sursa(job #2076416)

Utilizator dariusdariusMarian Darius dariusdarius Data 26 noiembrie 2017 15:56:02
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.97 kb
#include <algorithm>
#include <fstream>
#include <iostream>
#include <vector>
using namespace std;

const int MAX_N = 500005;

int a[MAX_N], b[MAX_N];

void MergeSort(int left, int right) {
    if (left >= right) {
        return;
    }
    int middle = (left + right) / 2;
    MergeSort(left, middle);
    MergeSort(middle + 1, right);
    int k = left;
    for (int i = left, j = middle + 1; i <= middle || j <= right; ++ k) {
        if (j == right + 1 || (i <= middle && a[i] <= a[j])) {
            b[k] = a[i ++];
        } else {
            b[k] = a[j ++];
        }
    }
    for (int i = left; i <= right; ++ i) {
        a[i] = b[i];
    }
}

int main() {
    ifstream cin("algsort.in");
    ofstream cout("algsort.out");
    int n;
    cin >> n;
    for (int i = 1; i <= n; ++ i) {
        cin >> a[i];
    }
    MergeSort(1, n);
    for (int i = 1; i <= n; ++ i) {
        cout << a[i] << (i == n ? "\n" : " ");
    }
    return 0;
}