Cod sursa(job #1563379)

Utilizator vancea.catalincatalin vancea.catalin Data 5 ianuarie 2016 22:58:07
Problema Sortare prin comparare Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.95 kb
#include<fstream>
#include<iostream>
#include<string>
#define DM 50050
using namespace std;
fstream fin("merge.in",ios::in),fout("merge.out",ios::out);
int n,x[DM],aux[DM];
void merge(int start,int stop)
{
    int m=(start+stop)/2,nr=0,a,b,i,j;
    if(start==stop) return ;
    if(stop-start==1)
    {
        a=min(x[start],x[stop]);
        b=max(x[start],x[stop]);
        x[start]=a;
        x[stop]=b;
        return ;
    }
    merge(start,m);merge(m+1,stop);
    for(i=start,j=m+1; i<=m && j<=stop ; )
    {
        if(x[i]<x[j])
        {
            aux[nr++]=x[i];
            i++;
        }
        else
        {
            aux[nr++]=x[j];
            j++;
        }
    }
    for(;i<=m;i++) aux[nr++]=x[i];
    for(;j<=stop;j++) aux[nr++]=x[j];
    for(i=0;i<nr;i++) x[start+i]=aux[i];
}
int main()
{
    int i;
    fin>>n;
    for(i=1;i<=n;i++) fin>>x[i];
    merge(1,n);
    for(i=1;i<=n;i++) fout<<x[i]<<" ";
}