Cod sursa(job #2907678)

Utilizator SchnitzelMannPavaloiu Gabriel SchnitzelMann Data 31 mai 2022 08:26:31
Problema Sortare prin comparare Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.94 kb
#include <fstream>
#define N 500002
using namespace std;

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

int x[N];

void merge(int l, int r, int m)
{
    int n1 = m - l + 1, n2 = r - m, i, j = 0, k = l;
    int L[n1], R[n2];

    for (int i = 0; i < n1; i++)
        L[i] = x[l + i];
    for (int i = 0; i < n2; i++)
        R[i] = x[m + i + 1];

    for (i = 0; i < n1 && j < n2; k++)
        if (L[i] < R[j])
            x[k] = L[i++];
        else
            x[k] = R[j++];

    while (i < n1)
        x[k++] = L[i++];

    while (j < n2)
        x[k++] = R[j++];
}

void mergesort(int l, int r)
{
    if (r > l)
    {
        int m = (l + r) / 2;
        mergesort(l, m);
        mergesort(m + 1, r);
        merge(l, r, m);
    }
}

int main()
{
    int n, i;
    
    in >> n;
    for (i = 0; i < n; ++i)
        in >> x[i];

    mergesort(0, n - 1);

    for (i = 0; i < n; ++i)
        out << x[i] << " ";
    out << "\n";

    return 0;
}