Cod sursa(job #1875854)

Utilizator ZeBuGgErCasapu Andreas ZeBuGgEr Data 11 februarie 2017 17:54:22
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.22 kb
#include<cstdio>

using namespace std;

int n;
int v[500001],sol[500001];

void merge_sort(int l,int r)
{
    if(l>=r)
    {
        return;
    }
    int m=(l+r)/2;
    merge_sort(l,m);
    merge_sort(m+1,r);

    int pos=0;
    int go_l=l,go_r=m+1;
    while(go_l<=m||go_r<=r)
    {
        pos++;
        if(go_l<=m&&go_r<=r)
        {
            if(v[go_l]<v[go_r])
            {
                sol[pos]=v[go_l];
                go_l++;
            }
            else
            {
                sol[pos]=v[go_r];
                go_r++;
            }
        }
        else if(go_l<=m)
        {
            sol[pos]=v[go_l];
            go_l++;
        }
        else
        {
            sol[pos]=v[go_r];
            go_r++;
        }
    }
    for(int i=l;i<=r;i++)
    {
        v[i]=sol[i-l+1];
    }
    /*for(int i=1;i<=n;i++)
    {
        printf("%d ",v[i]);
    }
    printf("\n");*/
}

int main()
{
    freopen("algsort.in","r",stdin);
    freopen("algsort.out","w",stdout);

    scanf("%d",&n);
    for(int i=1;i<=n;i++)
    {
        scanf("%d",&v[i]);
    }

    merge_sort(1,n);

    for(int i=1;i<=n;i++)
    {
        printf("%d ",v[i]);
    }
}