Cod sursa(job #2380415)

Utilizator dan.ghitaDan Ghita dan.ghita Data 14 martie 2019 21:20:58
Problema Sortare prin comparare Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.14 kb
#include <bits/stdc++.h>
#include <unordered_set>

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

int n, x;
vector<int> v;

void merge(vector<int> &v, int left, int right)
{
    int mid = left + (right - left) / 2;

    vector<int> merged;

    int i = left, j = mid + 1;
    while (i <= mid || j <= right)
        if (i > mid)
            merged.push_back(v[j++]);
        else
            if (j > right)
                merged.push_back(v[i++]);
            else
                if (v[i] <= v[j])
                    merged.push_back(v[i++]);
                else
                    merged.push_back(v[j++]);

    for (int i = 0; i < merged.size(); ++i)
        v[left + i] = merged[i];
}

void sort(vector<int> &v, int left, int right)
{
    if (left >= right)
        return;

    int mid = left + (right - left) / 2;
    sort(v, left, mid);
    sort(v, mid + 1, right);

    merge(v, left, right);
}

int main()
{
    f >> n;
    while (n--)
        f >> x,
        v.push_back(x);

    sort(v, 0, v.size() - 1);

    for (auto x : v)
        g << x << ' ';

    return 0;
}