Cod sursa(job #2065681)

Utilizator anca.sotirAnca Sotir anca.sotir Data 14 noiembrie 2017 00:19:40
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.26 kb
#include <fstream>
#define Nmax 500001
using namespace std;
ifstream f("algsort.in");
ofstream g("algsort.out");
unsigned int v[Nmax],vSortat[Nmax];
void Interclasare(int st1,int dr1,int st2,int dr2)
{
    int k=0,pozInitiala=st1;
    while(st1<=dr1 && st2<=dr2)
    {
        if(v[st1]<v[st2])
        {
            vSortat[++k]=v[st1];
            ++st1;
        }
        else
        {
            if(v[st1]>v[st2])
            {
                vSortat[++k]=v[st2];
                ++st2;
            }
        else
        {
            vSortat[++k]=v[st1];
            ++st1;
            vSortat[++k]=v[st2];
            ++st2;
        }
        }
    }
    while(st1<=dr1)
    {
        vSortat[++k]=v[st1];
        ++st1;
    }
    while(st2<=dr2)
    {
        vSortat[++k]=v[st2];
        ++st2;
    }
    for(int i=1;i<=k;++i)
        v[pozInitiala+i-1]=vSortat[i];
}
void MergeSort(int st,int dr)
{
    if(st<dr)
    {
        int mij=(st+dr)/2;
        MergeSort(st,mij);
        MergeSort(mij+1,dr);
        Interclasare(st,mij,mij+1,dr);
    }
}
int main()
{
    int N;
    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]<<' ';
    return 0;
}