Cod sursa(job #1868339)

Utilizator mihneacazCazacu Mihnea mihneacaz Data 4 februarie 2017 20:39:26
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.98 kb
#include<cstdio>
#include<algorithm>
using namespace std;
const int NMAX=500005;
int v[NMAX],aux[NMAX];
void inter(int a,int b,int d)
{
    int c,old,cnt,i;
    c=b+1;
    old=a;
    cnt=0;
    while(a<=b && c<=d)
    {
        if(v[a]<v[c])
            aux[++cnt]=v[a++];
        else
            aux[++cnt]=v[c++];
    }
    while(a<=b)
        aux[++cnt]=v[a++];
    while(c<=d)
        aux[++cnt]=v[c++];
    for(i=1; i<=cnt; i++)
        v[i+old-1]=aux[i];
}
void ms(int i,int j)
{
    int mij;
    if(i==j)
        return ;
    if(i==j-1)
        if(v[j]<v[i])
            swap(v[i],v[j]);
    mij=(i+j)/2;
    ms(i,mij);
    ms(mij+1,j);
    inter(i,mij,j);
}
int main()
{
    freopen("algsort.in","r",stdin);
    freopen("algsort.out","w",stdout);
    int t,n,c,sum,i,k;
    scanf("%d ",&n);
    for(i=1; i<=n; ++i)
        scanf("%d",&v[i]);
    ms(1,n);
    for(i=1; i<=n; i++)
        printf("%d ",v[i]);
    printf("\n");
    return 0;
}