Pagini recente » Cod sursa (job #377429) | Cod sursa (job #1091358) | Cod sursa (job #2553891) | Cod sursa (job #1130666) | Cod sursa (job #2224103)
#include <fstream>
#include <vector>
#include <string>
using namespace std;
const string IN_FILE = "algsort.in";
const string OUT_FILE = "algsort.out";
vector<int> merge(const vector<int>& left, const vector<int>& right) {
const int m = int(left.size());
const int n = int(right.size());
auto result = vector<int>(m + n);
int i = 0, j = 0, k = 0;
while (i < m || j < n) {
if (i < m && (j == n || left[i] <= right[j])) {
result[k++] = left[i++];
} else {
result[k++] = right[j++];
}
}
return result;
}
vector<int> mergeSort(const vector<int>& values) {
const int size = int(values.size());
if (size <= 1) return values;
const int middle = size / 2;
const auto left = vector<int>(values.cbegin(), values.cbegin() + middle);
const auto right = vector<int>(values.cbegin() + middle, values.end());
const auto sortedLeft = mergeSort(left);
const auto sortedRight = mergeSort(right);
return merge(sortedLeft, sortedRight);
}
vector<int> readValues() {
ifstream in(IN_FILE);
int n;
in >> n;
auto values = vector<int>(n);
for (int i = 0; i < n; i++) {
in >> values[i];
}
in.close();
return values;
}
void writeOutput(const vector<int>& values) {
ofstream out(OUT_FILE);
for (int i = 0; i < int(values.size()); i++) {
out << values[i] << (i + 1 < int(values.size()) ? " " : "\n");
}
out.close();
}
int main() {
const auto values = readValues();
const auto sorted = mergeSort(values);
writeOutput(sorted);
return 0;
}