Cod sursa(job #3209002)

Utilizator raizoSoare Antonio raizo Data 1 martie 2024 17:50:06
Problema Sortare prin comparare Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.6 kb
#include <fstream>
#include <vector>
using namespace std;

ifstream in("algsort.in");
ofstream out("algsort.out");

vector<int> merge(vector<int>& v1, vector<int>& v2) {
	vector<int> vec;
	int i = 0, j = 0;
	while (i < v1.size() && j < v2.size()) {
		if (v1[i] < v2[j]){
			vec.push_back(v1[i]);
			i++;
		}
		else {
			vec.push_back(v2[j]);
			j++;
		}
	}
	while (i < v1.size()) {
		vec.push_back(v1[i]);
		i++;
	}
	while (j < v2.size()) {
		vec.push_back(v2[j]);
		j++;
	}
	return vec;
}

vector<int> merge_sort(vector<int>& vec, int l, int r) {
	vector<int> v1, v2;
	if (l < r) {
		int mij = (l + r) / 2;
		v1 = merge_sort(vec, l, mij);
		v2 = merge_sort(vec, mij + 1, r);
		return merge(v1, v2);
	}
	else {
		vector<int> v{ vec[l] };
		return v;
	}
	
}

void swap(int& x, int& y) {
	int z = x;
	x = y;
	y = z;
}

vector<int> quick_sort(vector<int>& vec, int l, int r) {
	if (l < r) {
		int pivot = vec[r];
		int j = l-1;
		for (int i = l; i < r; i++) {
			if (vec[i] < pivot) {
				j++;
				swap(vec[i], vec[j]);
			}
		}
		j++;
		swap(vec[j], vec[r]);
		
		quick_sort(vec, l, j-1);
		quick_sort(vec, j + 1, r);
	}
	return vec;
}

int main() {
	vector<int> v;	
	int n;
	in >> n;
	for (int i = 0; i < n; i++) {
		int x;
		in >> x;
		v.push_back(x);
	}

	
	vector<int> v_merge_sort = merge_sort(v, 0, v.size() - 1);
	for (const auto& x : v_merge_sort) {
		out << x << " ";
	}
	out << endl;
	/*
	vector<int> v_quick_sort = quick_sort(v, 0, v.size() - 1);
	for (const auto& x : v_quick_sort) {
		cout << x << " ";
	}
	cout << endl;
	*/
	return 0;
}