Cod sursa(job #2667083)

Utilizator stefan.ghenescu2005@gmail.comStefan Ghenescu [email protected] Data 2 noiembrie 2020 20:24:12
Problema Sortare prin comparare Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.38 kb
#include <fstream>
#include <algorithm>


using namespace std;
ifstream in("algsort.in");
ofstream out("algsort.out");
const int maxN=500005;

int g[maxN],v[maxN];

void interclasare(int v[],int st1,int dr1,int dr2)
{
    int st2=dr1+1;
    int k=st1,i=st1,j=st2;
    while(i<=dr1 && j<=dr2)
    {
        if(v[i]<=v[j])
        {
            g[k]=v[i];
            k++;
            i++;
        }
        else
        {
            g[k]=v[j];
            k++;
            j++;
        }
    }
    while(i<=dr1)
    {
        g[k]=v[i];
        k++;
        i++;
    }
    while(j<=dr2)
    {
        g[k]=v[j];
        k++;
        j++;
    }
    for(int i=st1;i<=dr2;i++)
    {
        v[i]=g[i];
    }
}

void mergesort(int v[],int st,int dr)
{
    if(dr==st)
    {
        return;
    }
    if(dr-st==1)
    {
        if(v[st]<=v[dr])
        {
            return;
        }
        else
        {
            swap(v[st],v[dr]);
            return;
        }
    }
    if(dr-st>=2)
    {
        int mijl=(st+dr)/2;
        mergesort(v,st,mijl);
        mergesort(v,mijl+1,dr);
        interclasare(v,st,mijl,dr);
    }
}

int main()
{
    int n;
    in>>n;
    for(int i=0;i<n;i++)
    {
        in>>v[i];
    }
    mergesort(v,0,n-1);
    for(int i=0;i<n;i++)
    {
        out<<v[i]<<' ';
    }
    return 0;
}