Cod sursa(job #2545116)

Utilizator marius004scarlat marius marius004 Data 12 februarie 2020 20:42:07
Problema Sortare prin comparare Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.01 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;
}