Cod sursa(job #2292948)

Utilizator TooHappyMarchitan Teodor TooHappy Data 30 noiembrie 2018 12:24:23
Problema Sortare prin comparare Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.08 kb
#include <bits/stdc++.h>
 
using namespace std;
 
ifstream in("algsort.in");
ofstream out("algsort.out");

vector< int > v;

void mergeUtil(int left, int mid, int right) {
    vector< int > temp(right - left + 1);
    int i = left, j = mid + 1, k = 0;

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

    while(i <= mid) {
        temp[k++] = v[i++];
    }

    while(j <= right) {
        temp[k++] = v[j++];
    }

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

void mergeSort(int left, int right) {
    if(left < right) {
        int mid = (left + right) / 2;
        mergeSort(left, mid);
        mergeSort(mid + 1, right);
        mergeUtil(left, mid, right);
    }
}

int main() {
    ios::sync_with_stdio(false); in.tie(0); out.tie(0);
    
    int n; in >> n;

    v.resize(n);
    for(auto &it: v) {
        in >> it;
    }

    mergeSort(0, n - 1);

    for(auto it: v) {
        out << it << " ";
    }
 
    in.close(); out.close();
 
    return 0;
}