Cod sursa(job #2651869)

Utilizator Catalinu23Gavrila Catalin Catalinu23 Data 23 septembrie 2020 18:42:07
Problema Sortare prin comparare Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.31 kb
#include <bits/stdc++.h>

using namespace std;
ifstream fin("algsort.in");
ofstream fout("algsort.out");
int n;
int v[500005], a[500005], b[500005];

void Merge(int st, int mij, int dr)
{
    int k1=0, k2=0, p1=1, p2=1, p=st;
    cout<<st<<" "<<mij<<" "<<dr<<"\n";
    for(int i=st;i<=mij;i++)
    {
        a[++k1]=v[i];
    }
    for(int i=mij+1;i<=dr;i++)
    {
        b[++k2]=v[i];
    }
    while(p1<=k1&&p2<=k2)
    {
        if(a[p1]<=b[p2])
        {
            v[p]=a[p1];
            p1++;
        }
        else
        {
            v[p]=b[p2];
            p2++;
        }
        p++;
    }
    while(p1<=k1)
    {
        v[p]=a[p1];
        p1++;
        p++;
    }
    while(p2<=k2)
    {
        v[p]=b[p2];
        p2++;
        p++;
    }
    /*for(int i=1;i<=n;i++)
    {
        cout<<v[i]<<" ";
    }
    cout<<"\n";*/
}

void MergeSort(int st,int dr)
{
    //cout<<st<<" "<<dr<<"\n";
    if(st<dr)
    {
        int mij=(st+dr)/2;
        MergeSort(st,mij);
        MergeSort(mij+1,dr);
        //cout<<"mesaj\n";
        Merge(st,mij,dr);
    }
    return;
}
int main()
{
    fin>>n;
    for(int i=1;i<=n;i++)
    {
        fin>>v[i];
    }
    MergeSort(1,n);
    for(int i=1;i<=n;i++)
    {
        fout<<v[i]<<" ";
    }
    return 0;
}