Cod sursa(job #2200861)

Utilizator racheriunicolaechowchow racheriunicolae Data 2 mai 2018 20:43:19
Problema Sortare prin comparare Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.26 kb
#include <bits/stdc++.h>
#define NMAX 500005
using namespace std;
ifstream fin("algsort.in");
    ofstream fout("algsort.out");
void merge(int *v,int a,int b)
{
    int mid=(a+b)/2;
    /*int L[mid-a+5],R[b-mid+5];
    int k;
    k=0;
    for(int i=a;i<=mid;i++)
    {
       L[i-a+1]=v[i];
    }
    for(int i=mid+1;i<=b;i++)
    {
        R[i-mid]=v[i];
    }
    int i,j;
    i=1;j=1;
    while(i<= mid-a+1 and j<=b-mid)
    {
        while(L[i]<=R[j])v[++k]=L[i++];
        while(L[i]>=R[j])v[++k]=R[j++];
    }
    while(i<= mid-a+1)v[++k]=L[i++];
    while(j<=b-mid)v[++k]=R[j++];*/
    int done[b-a+5];

    int  i=a;
    int  j=mid+1;
    int k;
    k=0;
    while(i<=mid and j<=b)
    {
        if(j>b or (i<=mid and v[i]<=v[j]))
            done[++k]=v[i++];
        else
            done[++k]=v[j++];
    }
    for(i=a; i<=b; i++)
        v[i]=done[i-a+1];

}
void merge_sort(int *v, int a,int b)
{
    int mid=(a+b)/2;
    if(a==b)return;
    merge_sort(v,a,mid);
    merge_sort(v,mid+1,b);
    merge(v,a,b);
}
int n,i,v[NMAX];
int main()
{

    fin>>n;
    for(i=1; i<=n; i++)
    {
        fin>>v[i];
    }
    merge_sort(v,1,n);
    for(i=1; i<=n; i++)
    {
        fout<<v[i]<<" ";
    }
    return 0;
}