Cod sursa(job #2546471)

Utilizator marius004scarlat marius marius004 Data 14 februarie 2020 10:53:01
Problema Sortare prin comparare Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.99 kb
#include <fstream>

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

const int NMAX = 500'005;
int n,v[NMAX],w[NMAX];

void merge(int *v,int left,int right){

    int mid = (left + right) / 2;

    int i = left;
    int j = mid + 1;

    int k = 0;
    while(i <= mid && j <= right){

        if(v[i] <= v[j])
            w[++k] = v[i++];
        else
            w[++k] = v[j++];
    }

    while(i <= mid)
        w[++k] = v[i++];

    while(j <= right)
        w[++k] = v[j++];

    for(int i = left;i <= right;++i)
        v[i] = w[i - left + 1];
}

void mergesort(int *v,int left,int right){

    if(left < right){

        int mid = (left + right) / 2;

        mergesort(v,left,mid);
        mergesort(v,mid + 1,right);

        merge(v,left,right);
    }
}

int main(){

    f >> n;

    for(int i = 1;i <= n;++i)
        f >> v[i];

    mergesort(v,1,n);

    for(int i = 1;i <= n;++i)
        g << v[i] << ' ';

    return 0;
}