Cod sursa(job #1849129)

Utilizator SagunistuStrimbu Alexandru Sagunistu Data 17 ianuarie 2017 01:09:16
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.96 kb
#include <fstream>

using namespace std;

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

int a[500005],n,x[500005];

void interclasez(int a[],int n,int b[],int m,int c[])
{
    int i,j,k=0;
    i=j=1;
    while(i<=n&&j<=m)
    {
        if(a[i]<=b[j])
        {
            c[++k]=a[i];
            i++;
        }
        else
        {
            c[++k]=b[j];
            j++;
        }
    }
    while(i<=n)
        c[++k]=a[i++];
    while(j<=m)
        c[++k]=b[j++];
}

void mergeSort(int v[],int li,int lf)
{
    if(li==lf)
        return;
    int *a1,*a2;
    int n=(lf-li)+1;
    a1=v;
    a2=v+n/2;
    mergeSort(a1,li,li+n/2-1);
    mergeSort(a2,li+n/2,lf);
    interclasez(a1,n/2,a2,n-n/2,x);
    for(int i=1;i<=n;i++)
        v[i]=x[i];
}

int main()
{
    fin>>n;
    for(int i=1;i<=n;i++)
        fin>>a[i];
    mergeSort(a,1,n);
    for(int i=1;i<=n;i++)
        fout<<a[i]<<" ";
    return 0;
}