Cod sursa(job #2182798)

Utilizator MaxTeoTeo Oprescu MaxTeo Data 22 martie 2018 17:18:02
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.07 kb
#include <bits/stdc++.h>
#define N 500010
using namespace std;

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

int n,v[N];

void merge(int l,int mij,int r)
{
    int i,j,k;
    int n1=mij-l+1;
    int n2=r-mij;

    int L[n1+1],R[n2+1];

    for(i=1;i<=n1;++i)
        L[i]=v[l+i-1];
    for(j=1;j<=n2;++j)
        R[j]=v[mij+j];
    i=j=1;
    k=l;
    while(i<=n1&&j<=n2)
    {
        if(L[i]<=R[j])
        {
            v[k]=L[i];
            ++i;
        }
        else
        {
            v[k]=R[j];
            ++j;
        }
        ++k;
    }

    while(i<=n1)
    {
        v[k]=L[i];
        ++i,++k;
    }

    while(j<=n2)
    {
        v[k]=R[j];
        ++j,++k;
    }

}

void mergeSort(int l,int r)
{
    if(l<r)
    {
        int mij=(l+r)/2;

        mergeSort(l,mij);
        mergeSort(mij+1,r);

        merge(l,mij,r);
    }
}

int main()
{
    f>>n;
    for(int i=1;i<=n;++i)
        f>>v[i];
    mergeSort(1,n);
    for(int i=1;i<=n;++i)
        g<<v[i]<<" ";
    g<<"\n";
    return 0;
}