Cod sursa(job #1769762)

Utilizator VladTiberiuMihailescu Vlad Tiberiu VladTiberiu Data 3 octombrie 2016 09:10:42
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.03 kb
#include <bits/stdc++.h>

#define NMax 500001
using namespace std;
ifstream f("algsort.in");
ofstream g("algsort.out");

int v[NMax],a[NMax];
int nr,i,j,n;

void merge_sort(int st,int dr){
    if(st != dr){
        merge_sort(st,(st + dr)/2);
        merge_sort((st + dr)/2 + 1, dr);

        nr = 0;
        i = st;
        j = (st + dr) / 2 + 1;
        while(i <= (st + dr) / 2 && j <= dr){
            if(a[i] <= a[j]){
                v[++nr] = a[i];
                ++i;
            }else{
                v[++nr] = a[j];
                ++j;
            }
        }
        while(i <= (st + dr) / 2){
            v[++nr] = a[i];
            ++i;
        }
        while(j <= dr){
            v[++nr] = a[j];
            ++j;
        }
        for(int k = st; k <= dr; ++k){
            a[k] = v[k - st + 1];
        }
    }
}
int main()
{
    f >> n;
  //  g << 1.0*sizeof(v)*2/1024/1024 << '\n';
    for(int i = 1; i <= n; ++i)
        f >> a[i];
    merge_sort(1,n);
    for(int i = 1; i <= n; ++i)
        g << a[i] << ' ';
    return 0;
}