Cod sursa(job #3287053)

Utilizator Octa476Osnaga Octavian Alexandru Octa476 Data 15 martie 2025 00:59:26
Problema Sortare prin comparare Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.34 kb
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;

void merge(vector<int> &nums, int l, int r) {
    int mean = (l + r) / 2;

    int n1 = mean - l + 1;
    int n2 = r - mean;

    vector<int>left(n1);
    vector<int>right(n2);

    for (int i = l; i <= mean; i++)
        left[i - l] = nums[i];
    for (int i = mean + 1; i <= r; i++)
        right[i - mean - 1] = nums[i];

    int i = 0;
    int j = 0;

    int indx = l;

    while ((i < n1) && (j < n2)) {
        if (left[i] <= right[j])
            nums[indx++] = left[i++];
        else
            nums[indx++] = right[j++];
    }

    while (i < n1)
        nums[indx++] = left[i++];
    while (j < n2)
        nums[indx++] = right[j++];
}

void divide(vector<int> &nums, int l, int r) {
    if (l == r)
        return;
    int mean = (l + r) / 2;
    divide(nums, l, mean);
    divide(nums, mean + 1, r);
    merge(nums, l, r);
}

void merge_sort(int n, vector<int> &nums) {
    divide(nums, 0, n - 1);
}

int main() {
    int n;
    vector<int> nums;
    ifstream fin("algsort.in");
    fin >> n;
    for (int i = 0; i < n; i++) {
        int num = 0;
        fin >> num;
        nums.push_back(num);
    }
    fin.close();

    merge_sort(n, nums);

    ofstream fout("algsort.out");
    for (int i = 0; i < n; i++)
        fout << nums[i] << " ";
    fout.close();

    return 0;

}