Cod sursa(job #2848916)

Utilizator starduststardust stardust Data 14 februarie 2022 10:41:49
Problema Sortare prin comparare Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.03 kb
#include <fstream>
#include <vector>
using namespace std;
ifstream in("algsort.in");
ofstream out("algsort.out");

int n;
vector<int> v, temp;

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

    for (int i = left; i <= right; i++)
        v[i] = temp[i];
}

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

    mergesort(left, mid);
    mergesort(mid + 1, right);

    merge(left, right);
}

int main()
{
    in >> n;
    int x;
    v.resize(n);
    temp.resize(n);
    for (int i = 0; i < n; i++)
    {
        in >> x;
        v[i] = x;
    }
    mergesort(0, n - 1);
    for (int i = 0; i < v.size(); i++)
        out << v[i] << " ";
}