Cod sursa(job #3285036)

Utilizator voaidesrVoaides Robert voaidesr Data 12 martie 2025 14:30:49
Problema Sortare prin comparare Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.09 kb
// https://www.infoarena.ro/problema/algsort 
#include <fstream>
using namespace std;
int v[500000];

ifstream cin("algsort.in");
ifstream cout("algsort.out");

void merge(int left, int mid, int right) {
    int n1 = mid - left + 1;
    int n2 = right - mid;
    
    int* L = new int[n1];
    int* R = new int[n2];

    for (int i = 0; i < n1; i++)
        L[i] = v[left + i];
    for (int j = 0; j < n2; j++)
        R[j] = v[mid + 1 + j];
    
    int i = 0, j = 0, k = left;
    while (i < n1 && j < n2) {
        if (L[i] <= R[j]) {
            v[k++] = L[i++];
        } else {
            v[k++] = R[j++];
        }
    }
    
    while (i < n1)
        v[k++] = L[i++];
    
    while (j < n2)
        v[k++] = R[j++];
    
    delete[] L;
    delete[] R;
}

void mergeSort(int left, int right) {
    if (left < right) {
        int mid = left + (right - left) / 2;

        mergeSort(left, mid);
        mergeSort(mid + 1, right);
        
        merge(left, mid, right);
    }
}

int main() {
    int n;
    cin >> n;
    for(int i = 0; i < n; i++) 
        cin >> v[i];
    mergeSort(0, n);
    return 0;
}