Cod sursa(job #1868687)

Utilizator CriistinaMicula Cristina Criistina Data 5 februarie 2017 10:41:14
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.95 kb
#include <iostream>
#include <fstream>
#define Nmax 500001

using namespace std;
ifstream f("algsort.in");
ofstream g("algsort.out");

int n, v[Nmax], s[Nmax];

void overwrite(int st , int dr)
{
    for(int i=st;i<=dr;i++)
        v[i]=s[i];
}
void merge_sort(int st, int dr)
{
    if(st>=dr)
        return;
    int mij=(st+dr)/2;
    merge_sort(st, mij);
    merge_sort(mij+1, dr);
    int x=st, y=mij+1, aux=st;
    while(st<=dr)
    {
        if(x>=mij+1 || (v[y]<=v[x] && y<=dr))
        {
            s[st]=v[y];
            y++;
            st++;
        }
        else if(y>dr || (v[x]<=v[y] && x<=mij))
        {
            s[st]=v[x];
            st++;
            x++;
        }
    }
    overwrite(aux, dr);
}
int main()
{
    f>>n;
    for(int i=1;i<=n;i++)
    {
        f>>v[i];
        s[i]=v[i];
    }
    merge_sort(1, n);
    for(int i=1;i<=n;i++)
    {
        g<<v[i]<<" ";
    }
    return 0;
}