Cod sursa(job #3184772)

Utilizator LuciBBadea Lucian LuciB Data 16 decembrie 2023 19:16:28
Problema Sortare prin comparare Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.01 kb
#include <bits/stdc++.h>

using namespace std;

ifstream fin("algsort.in");
ofstream fout("algsort.out");

const int NMAX = 5e5;

int v[NMAX];
int aux[NMAX];

void merge(int left, int right) {
    int mid = (left + right) / 2;
    int i = left, j = mid + 1, k = left;
    while(i <= mid && j <= right) {
        if(v[i] <= v[j])
            aux[k++] = v[i++];
        else aux[k++] = v[j++];
    }
    while(i <= mid)
        aux[k++] = v[i++];
    while(j <= right)
        aux[k++] = v[j++];
    for(i = left; i <= right; i++)
        v[i] = aux[i];
}

void mergesort(int left, int right) {
    int mid = (left + right) / 2;
    if(left < mid) /// intervalul [left, mid] are cel putin 2 elem
        mergesort(left, mid);
    if(mid + 1 < right)
        mergesort(mid + 1, right);
    merge(left, right);
}


int main() {
    int n;
    fin >> n;
    for(int i = 0; i < n; i++)
        fin >> v[i];
    mergesort(0, n - 1);
    for(int i = 0; i < n; i++)
        fout << v[i] << ' ';
    fin.close();
    fout.close();
    return 0;
}