Cod sursa(job #2249688)

Utilizator MaxTeoTeo Oprescu MaxTeo Data 30 septembrie 2018 10:33:17
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.08 kb
#include <bits/stdc++.h>
using namespace std;
ifstream f("algsort.in");
ofstream g("algsort.out");

const int NMAX = 5e5 + 5;

int n;
int v[NMAX], aux[NMAX];

void Read()
{
    f >> n;
    for(int i = 1; i <= n; ++i)
        f >> v[i];
}

void Print()
{
    for(int i = 1; i <= n; ++i)
        g << v[i] << " ";
}

void Unite(int left, int middle, int right)
{
    int i = left, j = middle + 1, k = 0;

    while(i <= middle && j <= right)
    {
        if(v[i] < v[j])
            aux[++k] = v[i++];
        else
            aux[++k] = v[j++];
    }

    while(i <= middle)
        aux[++k] = v[i++];
    while(j <= right)
        aux[++k] = v[j++];

    for(int i = left; i <= right; ++i)
        v[i] = aux[i - left + 1];
}

void Merge_Sort(int left, int right)
{
    int middle;
    if(right > left)
    {
        middle = (left + right) / 2;
        Merge_Sort(left, middle);
        Merge_Sort(middle + 1, right);
        Unite(left, middle, right);
    }
}

int main()
{
    Read();
    Merge_Sort(1, n);
    Print();
    return 0;
}