Cod sursa(job #2900142)

Utilizator ViAlexVisan Alexandru ViAlex Data 10 mai 2022 14:18:46
Problema Sortare prin comparare Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.12 kb
#include<iostream>
#include<fstream>

using namespace std;
ifstream in("algsort.in");
ofstream out("algsort.out");


const int mx = 500100;
int v[mx];

void merge(const int *a, int size_a, const int *b, int size_b, int *c) {
    int i = 0, j = 0, k = 0;

    while (i < size_a && j < size_b) {
        if (a[i] < b[j]) {
            c[k++] = a[i++];
        } else {
            c[k++] = b[j++];
        }
    }

    if (i < size_a) {
        while (i < size_a) {
            c[k++] = a[i++];
        }
    } else {
        while (j < size_b) {
            c[k++] = b[j++];
        }
    }
}

void sort(int *x, int l, int r) {
    if (l >= r)
        return;

    int m = (l + r) / 2;
    sort(x, l, m);
    sort(x, m + 1, r);

    int size_left = m - l + 1;
    int size_right = r - m;

    int aux[r - l + 1];
    merge(x + l, size_left, x + m + 1, size_right, aux);
    for (int i = l; i <= r; i++) {
        x[i] = aux[i - l];
    }
}


int main() {
    int n;
    in >> n;
    for (int i = 0; i < n; i++) {
        in >> v[i];
    }
    sort(v, 0, n - 1);
    for (int i = 0; i < n; i++) {
        out << v[i] << " ";
    }

    return 0;
}