Cod sursa(job #1894565)

Utilizator rares96cheseliRares Cheseli rares96cheseli Data 26 februarie 2017 22:52:15
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.13 kb
#include <bits/stdc++.h>

using namespace std;

ifstream f("algsort.in");
ofstream g("algsort.out");

int N, a[500005];

void _merge(int left, int right) {
    int tmp[right - left + 1];
    int middle = (right + left) >> 1;
    int i = left, j = middle + 1, k = 0;

    while (i <= middle && j <= right) {
        if (a[i] <= a[j]) {
            tmp[++k] = a[i];
            ++i;
        } else {
            tmp[++k] = a[j];
            ++j;
        }
    }

    while (i <= middle) {
        tmp[++k] = a[i];
        ++i;
    }

    while (j <= right) {
        tmp[++k] = a[j];
        ++j;
    }

    for (int i = left, j = 1; i <= right; ++i, ++j) {
        a[i] = tmp[j];
    }
}

void mergeSort(int left, int right) {
    if (left == right) {
        return;
    }

    int middle = (left + right) >> 1;
    mergeSort(left, middle);
    mergeSort(middle + 1, right);
    _merge(left, right);
}

int main() {
    f >> N;
    for (int i = 1; i <= N; ++i) {
        f >> a[i];
    }

    mergeSort(1, N);
    for (int i = 1; i <= N; ++i) {
        g << a[i] << ' ';
    }
    return 0;
}