Cod sursa(job #1742407)

Utilizator AplayLazar Laurentiu Aplay Data 16 august 2016 13:51:04
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.07 kb
#include <bits/stdc++.h>

#define NMAX 500001

using namespace std;

int N, values[NMAX], temp[NMAX];

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

    int middle = left + (right - left) / 2;

    mergeSort(values, left, middle);
    mergeSort(values, middle + 1, right);

    int l = left, m = middle + 1, t = left;
    while (l <= middle && m <= right) {
        if (values[l] < values[m]) {
            temp[t++] = values[l];
            ++l;
        } else {
            temp[t++] = values[m];
            ++m;
        }
    }

    while(l <= middle) temp[t++] = values[l++];
    while(m <= right) temp[t++] = values[m++];

    for (l = left; l <= right; ++l) values[l] = temp[l];
}

int main() {
    freopen("algsort.in", "r", stdin);
    freopen("algsort.out", "w", stdout);

    scanf("%d", &N);
    for (int it = 0; it < N; ++it) {
        scanf("%d", &values[it]);
    }
    mergeSort(values, 0, N - 1);
    for (int it = 0; it < N; ++it) printf("%d ", values[it]);

    return 0;
}