Cod sursa(job #1880335)

Utilizator BAC_AndreiBejinariu Andrei Catalin BAC_Andrei Data 15 februarie 2017 18:08:38
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.89 kb
#include <bits/stdc++.h>

using namespace std;
ifstream f("algsort.in");
ofstream g("algsort.out");
int n,i,x[500010],y[500010];
void merge_sort(int,int),intreclaseaza(int,int,int);
int main()
{
    f>>n;
    for(i=1; i<=n; i++)
        f>>x[i];
    merge_sort(1,n);
    for(i=1; i<=n; i++)
        g<<x[i]<<' ';
    return 0;
}
void merge_sort(int L,int R)
{
    if(L==R)return;
    if(L==R-1)
    {
        if(x[L]>x[R])
            swap(x[L],x[R]);
        return;
    }
    int M=(L+R)/2;
    merge_sort(L,M);
    merge_sort(M+1,R);
    intreclaseaza(L,M,R);
}
void intreclaseaza(int L,int M,int R)
{
    int i,j,k;
    for(i=L;i<=R;i++)
        y[i]=x[i];
    for(i=L,j=M+1,k=L;i<=M&&j<=R;)
    {
        if(y[i]<=y[j])
            x[k++]=y[i++];
        else
            x[k++]=y[j++];
    }
    for(;i<=M;i++,k++)x[k]=y[i];
    for(;j<=R;j++,k++)x[k]=y[j];
}