Cod sursa(job #1221218)

Utilizator rangerChihai Mihai ranger Data 19 august 2014 21:39:22
Problema Sortare prin comparare Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 0.88 kb
#include<fstream>
using namespace std;

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

const int nmax = 500000+10;

int n,A[nmax],L[nmax/2],R[nmax/2];

void Merge(int p,int r, int q)
{
    int n1=r-p+1;
    int n2=q-r;
    int i,j,k;
    for (i=1;i<=n1;++i)
        L[i]=A[i+p-1];
    for (i=1;i<=n2;i++)
        R[i]=A[i+r];
    i=j=1;
    L[n1+1]=R[n2+1]=1<<31-1;
    for (k=p;k<=q;++k)
        if (L[i]>R[j])
            A[k]=R[j],++j;
        else
            A[k]=L[i],++i;
}

void MergeSort(int l, int r)
{
    if (l<r) {
    MergeSort(l,(l+r)/2);
    MergeSort((l+r)/2+1,r);
    Merge(l,(l+r)/2,r);
    }
}

void Read()
{
    cin>>n;
    for (int i=1;i<=n;i++)
        cin>>A[i];
}
void Solve()
{
    MergeSort(1,n);
    for (int i=1;i<=n;i++)
        cout<<A[i]<<" ";
}
int main()
{
    Read();
    Solve();
    return 0;
}