Pagini recente » Cod sursa (job #1907230) | Cod sursa (job #1059210) | Cod sursa (job #1049654) | Cod sursa (job #1045107) | Cod sursa (job #2252644)
#include <vector>
#include <fstream>
using namespace std;
ifstream f("algsort.in");
ofstream g("algsort.out");
void combine(int left, int middle, int right, vector<int> &toSort) {
vector<int> combined;
int crt_left = left;
int crt_right = middle + 1;
while (crt_left <= middle && crt_right <= right) {
if (toSort[crt_left] < toSort[crt_right]) {
combined.push_back(toSort[crt_left]);
crt_left += 1;
}
else {
combined.push_back(toSort[crt_right]);
crt_right += 1;
}
}
for (; crt_left <= middle; crt_left++)
combined.push_back(toSort[crt_left]);
for (; crt_right <= right; crt_right++)
combined.push_back(toSort[crt_right]);
for (int i = 0; i < combined.size(); i++)
toSort[left + i] = combined[i];
}
void mergeSort(int left, int right, vector<int> &toSort) {
if (right == left)
return;
int middle = (left + right) / 2;
mergeSort(left, middle, toSort);
mergeSort(middle + 1, right, toSort);
combine(left, middle, right, toSort);
}
int main()
{
int n;
vector<int> toSort;
f >> n;
int el;
for (int i = 0; i < n; i++) {
f >> el;
toSort.push_back(el);
}
mergeSort(0, n - 1, toSort);
for (auto elem : toSort)
g << elem << " ";
return 0;
}