Cod sursa(job #1882311)

Utilizator andysoloAndrei Solo andysolo Data 17 februarie 2017 09:03:05
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.87 kb
#include <cstdio>
#define NMAX 1000000+5

using namespace std;

int N,v[NMAX],c[NMAX];

void merges(int st,int mid,int dr)
{
    for(int i=st;i<=dr;i++)
        c[i]=v[i];

    int i=st;
    int j=mid+1;
    int k=st-1;
    while(i<=mid&&j<=dr)
        if(c[i]<=c[j])v[++k]=c[i++];
        else v[++k]=c[j++];

    for(int t=i;t<=mid;t++)
        v[++k]=c[t];
    for(int t=j;t<=dr;t++)
        v[++k]=c[t];

}

void mergesort(int st,int dr)
{
    int mid=(st+dr)>>1;
    if(st!=dr)
    {
        mergesort(st,mid);
        mergesort(mid+1,dr);
    }
    merges(st,mid,dr);
}

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]);

    mergesort(1,N);

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

    return 0;
}