Cod sursa(job #2082541)

Utilizator alex2209alexPavel Alexandru alex2209alex Data 6 decembrie 2017 15:27:51
Problema Sortare prin comparare Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.31 kb
#include <fstream>

using namespace std;
ifstream f("algsort.in");
ofstream g("algsort.out");
int v[500001],v2[500001],n;
void brut(int st,int dr)
{
    int vf=1;
    while (vf==1)
    {
        vf=0;
        for (int i=st;i<dr;++i)
        {
            if (v[i]>v[i+1])
            {
                swap(v[i],v[i+1]);
                vf=1;
            }
        }
    }
}
void interclasare(int st,int dr)
{
    int mij=(st+dr)/2;
    int i=st;
    int i2=mij+1;
    int j=st-1;
    while(i<=mij && i2<=dr)
    {
        v2[++j]=min(v[i],v[i2]);
        if(min(v[i],v[i2])==v[i])
        {
            i++;
        }
        else
        {
            i2++;
        }
    }
    while(i<=mij)
    {
        v2[++j]=v[i];
        i++;
    }
    while(i2<=dr)
    {
        v2[++j]=v[i2];
        i2++;
    }
    for(i=st;i<=st+dr;i++)
    {
        v[i]=v2[i];
    }
}
void merge_sort(int st,int dr)
{
    if(dr-st+1<=3)
    {
        brut(st,dr);
    }
    else
    {
        int mij=(st+dr)/2;
        merge_sort(st,mij);
        merge_sort(mij+1,dr);
    }
    interclasare(st,dr);
}
int main()
{
    f>>n;
    for(int i=1;i<=n;i++)
    {
        f>>v[i];
    }
    merge_sort(1,n);
    for(int i=1;i<=n;i++)
    {
        g<<v[i]<<" ";
    }
    return 0;
}