Cod sursa(job #2268278)

Utilizator ValentinSavoiuFMI Savoiu Valentin-Marian ValentinSavoiu Data 24 octombrie 2018 17:20:14
Problema Sortare prin comparare Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.88 kb
#include <fstream>// MERGESORT PENTRU LABORATOR ASD
#define NMAX 500001
using namespace std;
ifstream f("algsort.in");
ofstream g("algsort.out");
int a[NMAX], i, N;
void Merge(int *v, int st1, int dr1, int st2, int dr2) {
    int b[NMAX], c = st1, st = st1, dr = dr2;
    while(st1 <= dr1 && st2 <= dr2) {
        if(a[st1] < a[st2])     b[c++] = a[st1++];
        else b[c++] = a[st2++];
    }
    while(st1 <= dr1) b[c++] = a[st1++];
    while(st2 <= dr2) b[c++] = a[st2++];
    for(int i = st; i <= dr; i++) a[i] = b[i];
}
void MergeS(int *v, int st,int dr) {
    if(st == dr) return;
    int mid = st + (dr - st) / 2;
    MergeS(v, st, mid);
    MergeS(v, mid + 1, dr);
    Merge(v, st, mid, mid+1, dr);
}
int main() {
    f>>N;
    for(i = 1; i <= N; i++)
        f>>a[i];
    MergeS(a, 1, N);
    for(i = 1; i <= N; i++)
        g<<a[i]<<' ';
    return 0;
}