Cod sursa(job #1812862)

Utilizator RG1999one shot RG1999 Data 22 noiembrie 2016 14:50:40
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.98 kb
#include <cstdio>

using namespace std;
int i,n,a[500005];
int interclasare(int p,int u,int m)
{
    int i,v[500005],x,y,cnt;
    for(i=p;i<=u;i++)
        v[i]=0;
    x=p;
    y=m+1;
    for(i=p;i<=u;i++)
        if(a[x]<=a[y]&&x<=m||(y>u&&x<=m))
        v[i]=a[x],x++;
        else
        if(a[y]<=a[x]&&y<=u||(x>m&&y<=u))
            v[i]=a[y],y++;

    for(i=p;i<=u;i++)
           a[i]=v[i];
}
int divide(int p,int u)
{
    int aux;
    int m;
    if(p>u)return 0;
    else
        if(u-p<=1)
    {
        if(a[p]>a[u])
        {
        aux=a[p];
        a[p]=a[u];
        a[u]=aux;
        }
    }
    else
    {
        m=(p+u)/2;
        divide(p,m);
        divide(m+1,u);
        interclasare(p,u,m);
    }
}
int main()
{
    freopen("algsort.in","r",stdin);
    freopen("algsort.out","w",stdout);
    scanf("%d",&n);
    for(i=1;i<=n;i++) scanf("%d",&a[i]);
    divide(1,n);
    for(i=1;i<=n;i++) printf("%d ",a[i]);
    return 0;
}