Cod sursa(job #2670273)

Utilizator Alex_BubBuburuzan Alexandru Alex_Bub Data 9 noiembrie 2020 16:00:15
Problema Sortare prin comparare Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.01 kb
#include <fstream>

using namespace std;

ifstream fin("algsort.in");
ofstream fout("algsort.out");

const int NMax = 5e5;
int N, V[NMax + 5], A[NMax + 5];

void Read()
{
    fin >> N;

    for(int i = 1; i <= N; i++) {
        fin >> V[i];
    }
}

void Mergesort(int left, int right)
{
    if(left >= right)
        return;

    int pivot = (left + right) >> 1;
    Mergesort(left, pivot);
    Mergesort(pivot + 1, right);

    /// merge
    int i = left, j = pivot + 1, ct = 0;

    while(i <= pivot && j <= right) {
        if(V[i] < V[j])
            A[++ct] = V[i++];
        else
            A[++ct] = V[j++];
    }
    while(i <= pivot)
        A[++ct] = V[i++];

    while(j <= right)
        A[++ct] = V[j++];

    for(int i = 1; i <= ct; i++)
        V[left + i - 1] = A[i];
}

void Print()
{
    for(int i = 1; i <= N; i++) {
        fout << V[i] << " ";
    }
    fout << '\n';
}

int main()
{
    Read();
    Mergesort(1, N);
    Print();

    return 0;
}