Cod sursa(job #2901349)

Utilizator maria-marianita.cucos@s.unibuc.roCucos Marianita [email protected] Data 13 mai 2022 16:58:30
Problema Sortare prin comparare Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.24 kb
#include<iostream>
#include<fstream>
using namespace std;
ifstream f ("algsort.in");
ofstream g ("algsort.out");

void merge(int *array, int l, int m, int r) {
    int i, j, k, nl, nr;
//   size st si dr
    nl = m-l+1; nr = r-m;
    int larr[nl], rarr[nr];
//    stanga
    for(i = 0; i<nl; i++)
        larr[i] = array[l+i];
//    dreapta
    for(j = 0; j<nr; j++)
        rarr[j] = array[m+1+j];

    i = 0; j = 0; k = l;

    while(i < nl && j<nr) {
        if(larr[i] <= rarr[j]) {
            array[k] = larr[i];
            i++;
        }else{
            array[k] = rarr[j];
            j++;
        }
        k++;
    }
    while(i<nl) {
        array[k] = larr[i];
        i++; k++;
    }
    while(j<nr) {
        array[k] = rarr[j];
        j++; k++;
    }
}

void mergeSort(int *array, int l, int r) {
    int m;
    if(l < r) {
        m = l+(r-l)/2;
        mergeSort(array, l, m);
        mergeSort(array, m+1, r);
        merge(array, l, m, r);
    }
}

int main() {
    int n;
//    cout << "n=";
    f >> n;
    int arr[n];
    for(int i = 0; i<n; i++) {
        f >> arr[i];
    }
    mergeSort(arr, 0, n-1);
    for(int i = 0; i<n; i++)
        g << arr[i] << " ";
//    cout << endl;
}