Cod sursa(job #2864733)

Utilizator nurof3nCioc Alex-Andrei nurof3n Data 8 martie 2022 10:23:46
Problema Sortare prin comparare Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.89 kb
#include <fstream>
#include <algorithm>

int N;
int v[500001];
int tmp[500001];

void merge(int left, int mid, int right) {
    int i = left, j = mid + 1;
    int cnt = 0;
    while (i <= mid && j <= right) {
        if (v[i] <= v[j])
            tmp[cnt++] = v[i++];
        else
            tmp[cnt++] = v[j++];
    }

    while (i <= mid)
        tmp[cnt++] = v[i++];
    while (j <= right)
        tmp[cnt++] = v[j++];

    std::copy(tmp, tmp + cnt, v + left);
}

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

    int mid = (left + right) / 2;
    mergesort(left, mid);
    mergesort(mid + 1, right);
    merge(left, mid, right);
}

int main() {
    std::ifstream in("algsort.in");
    in >> N;
    for (int i = 0; i < N; ++i)
        in >> v[i];

    mergesort(0, N - 1);

    std::ofstream out("algsort.out");
    for (int i = 0; i < N; ++i)
        out << v[i] << ' ';
}