Cod sursa(job #2901377)

Utilizator N.B.Lnabil. N.B.L Data 13 mai 2022 17:23:04
Problema Sortare prin comparare Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.4 kb

#include <iostream>
#include <fstream>

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

using namespace std;


const int N = 1e5 + 100;

int arr[N];
int sol[N];

void mergeSort(int st, int ed);

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

int main() {
    int n;
    in >> n;
    for (int i = 0; i < n; ++i)
        in >> arr[i];

    mergeSort(0, n);
    for (int i = 0; i < n; ++i)
        out << arr[i] << " ";
    return 0;
}

//    3 2 12 22
//    3 2 - 12 22
//    3 - 2 - 12 - 22

//    0 - 1 - 2  - 3

//    2 - 3
//    12 - 22

//    4
//    22 12 3 2

//33 -4 33 -23 3399
void mergeSort(int st, int ed) {
    if (st == ed)
        return;
    int mid = (st + ed) / 2;
    mergeSort(st, mid);
    mergeSort(mid + 1, ed);
    int i = st;
    int j = mid + 1 ;
    int k = st;
    while (i <= mid && j <= ed) {
        if (arr[i] > arr[j])
            sol[k] = arr[j], j++;
        else
            sol[k] = arr[i], i++;
        k++;
    }
//    cout << "i: " << i << " " << "j: " << j << endl;
    while (i <= mid) {
        sol[k] = arr[i];
        i++, k++;
    }
    while (j <= ed) {
        sol[k] = arr[j];
        j++, k++;
    }

    for( int i = st ; i <= ed; ++i){
        arr[i] = sol[i];
    }
}