Cod sursa(job #2874970)

Utilizator LeperBearMicu Alexandru LeperBear Data 20 martie 2022 16:14:46
Problema Sortare prin comparare Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.04 kb
#include <bits/stdc++.h>
using namespace std;

void merge_halves(int *v, int left, int right) {
	int mid = (left + right) / 2;
	vector<int> aux;
	int i = left, j = mid + 1;
	
	while (i <= mid && j <= right)
		if (v[i] <= v[j])
			aux.push_back(v[i++]);
		else
			aux.push_back(v[j++]);

	while (i <= mid) 
		aux.push_back(v[i++]);
 
	while (j <= right)
		aux.push_back(v[j++]);
 
	for (int k = left; k <= right; k++)
		v[k] = aux[k - left];
}

void merge_sort(int *v, int left, int right) {
	if (left >= right)
        return;
    int mid = (left + right) / 2;

    merge_sort(v, left, mid);
    merge_sort(v, mid + 1, right);
    merge_halves(v, left, right);
}

int main() {
    int n;
    vector<int> v;
    ifstream fin;
    fin.open("algsort.in");
    ofstream fout;
    fout.open("algsort.out");
    fin >> n;
    for (int i = 0; i < n; i++) {
        int x;
        fin >> x;
        v.push_back(x);
    }
    merge_sort(v.data(), 0, v.size() - 1);
    for (int i = 0; i < n; i++)
        fout << v[i] << " ";
    fin.close();
    fout.close();
    return 0;
}