Pagini recente » Cod sursa (job #1181507) | Cod sursa (job #2983884) | Cod sursa (job #1356181) | Cod sursa (job #2486712) | Cod sursa (job #3209002)
#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;
}