Cod sursa(job #2063328)

Utilizator mihailrazMihail Turcan mihailraz Data 11 noiembrie 2017 10:49:49
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.23 kb
/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

/* 
 * File:   main.cpp
 * Author: mihailturcan
 *
 * Created on November 11, 2017, 10:14 AM
 */

#include <cstdlib>
#include <fstream>

using namespace std;
ifstream fi("algsort.in");
ofstream fo("algsort.out");
int n;
unsigned X[500005],Y[500005];

void merge_sort(int st, int dr)
{
    if(dr==st)
        return;
    if(dr-st==1)
        if(X[st]>X[dr])
            swap(X[st],X[dr]);
        else
            ;
    else
    {
        int mij=(st+dr)/2,i,j,k;
        merge_sort(st,mij);
        merge_sort(mij+1,dr);
        for(i=st, j=mij+1, k=st; i<=mij && j<=dr; )
        {
            if(X[i]<X[j])
                Y[k++]=X[i++];
            else
                Y[k++]=X[j++];
        }
        while(i<=mij)
            Y[k++]=X[i++];
        while(j<=dr)
            Y[k++]=X[j++];
        for(i=st; i<=dr; i++)
            X[i]=Y[i];
    }
}

int main(int argc, char** argv)
{
    fi>>n;
    for(int i=1; i<=n; i++)
        fi>>X[i];
    merge_sort(1,n);
    for(int i=1; i<=n; i++)
        fo<<X[i]<<" ";
    fi.close();
    fo.close();
    return 0;
}