Pagini recente » Monitorul de evaluare | Cod sursa (job #277780) | Cod sursa (job #2099484) | Cod sursa (job #2783609) | Cod sursa (job #1799896)
#include <fstream>
#include <vector>
using namespace std;
void mergesort(vector<int>& values, const int from, const int to) {
if (from == to - 1) {
return;
}
const int mid = from + (to - from) / 2;
mergesort(values, from, mid);
mergesort(values, mid, to);
auto aux = vector<int>(to - from);
int i = from, j = mid, k = 0;
while (i < mid && j < to) {
aux[k++] = values[i] < values[j] ? values[i++] : values[j++];
}
for (; i < mid; aux[k++] = values[i++]) {}
for (; j < to; aux[k++] = values[j++]) {}
for (int p = 0; p < k; ++p) {
values[from + p] = aux[p];
}
}
int main() {
ifstream in("algsort.in");
ofstream out("algsort.out");
int n;
in >> n;
auto values = vector<int>(n);
for (int i = 0; i < n; ++i) {
in >> values[i];
}
mergesort(values);
for (int i = 0; i < n; ++i) {
out << values[i] << (i < n - 1 ? " " : "\n");
}
in.close();
out.close();
}