Cod sursa(job #1995986)

Utilizator VladTiberiuMihailescu Vlad Tiberiu VladTiberiu Data 29 iunie 2017 17:33:02
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.96 kb
#include <fstream>
#include <iostream>
#include <cstring>

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


const int NMax = 500002;

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

void merge_sort(int l, int r){
    if(l == r)
        return;

    int mid = (l + r) / 2;
    merge_sort(l, mid);
    merge_sort(mid + 1, r);

    int i = l, j = mid + 1,nr = 0;
    while(i <= mid && j <= r){
        if(a[i] < a[j]){
            v[++nr] = a[i];
            i++;
        } else {
            v[++nr] = a[j];
            j++;
        }
    }
    while(i <= mid){
        v[++nr] = a[i];
        i++;
    }
    while(j <= r){
        v[++nr] = a[j];
        j++;
    }
    for(int i = l; i <= r; ++i){
        a[i] = v[i - l + 1];
    }
}
int main(){
    f >> 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] << ' ';
    }
    g << '\n';
}