Cod sursa(job #1855066)

Utilizator DarianCDarian Craciun DarianC Data 23 ianuarie 2017 13:43:25
Problema Sortare prin comparare Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 0.95 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("algsort.in");
ofstream fout("algsort.out");

int A[500005], B[250005], N, k;

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

void Merge(int L, int M, int R)
{
    int i=L, j=M+1, k=0;
    fill(B, B+(R-L)+2, 0);

    while(i<=M && j<=R)
    {
        if(A[i] < A[j]) B[k] = A[i++];
        else B[k] = A[j++];
        k++;
    }
    while(i <= M) B[k++] = A[i++];
    while(j <= R) B[k++] = A[j++];

    for(i=L; i<=R; i++) A[i] = B[i-L];
}

void MergeSort(int Left, int Right)
{
    if(Left < Right)
    {
        int Mid = (Left+Right)/2;
        MergeSort(Left, Mid);
        MergeSort(Mid+1, Right);
        Merge(Left, Mid, Right);
    }
}

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

int main()
{
    Read();
    MergeSort(1, N);
    Print();
    return 0;
}