Cod sursa(job #1785070)

Utilizator horatiucheval2Horatiu Andrei Cheval horatiucheval2 Data 20 octombrie 2016 20:57:03
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.21 kb
#include <iostream>
#include <fstream>

const int MAX = 500000;

// v[left...mid] interclasat cu v[mid+1 ... right]
void mergeSubarrays(int v[], int left, int mid, int right){
    int res[MAX];
    int i = left, j = mid + 1, k = 0;

    while(i <= mid && j <= right){
        if(v[i] < v[j]){
            res[k++] = v[i];
            i++;
        }else{
            res[k++] = v[j];
            j++;
        }
    }

    if(i <= mid){
        for(; i <= mid; i++){
            res[k++] = v[i];
        }
    }else if(j <= right){
        for(; j <= right; j++){
            res[k++] = v[j];
        }
    }

    for(i = 0; i < k; i++){
        v[left + i] = res[i];
    }
}


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);

        mergeSubarrays(v, left, mid, right);
    }
}


int main(){
    std::ifstream fin("algsort.in");
    std::ofstream fout("algsort.out");

    int n, v[MAX];
    fin >> n;
    for(int i = 0; i < n; i++){
        fin >> v[i];
    }
    mergeSort(v, 0, n - 1);

    for(int i = 0; i < n; i++){
        fout << v[i] << " ";
    }

    fin.close();
    fout.close();
    return 0;
}