Pagini recente » Cod sursa (job #2903291) | Cod sursa (job #3264167) | Cod sursa (job #139083) | Cod sursa (job #2807915) | Cod sursa (job #2900142)
#include<iostream>
#include<fstream>
using namespace std;
ifstream in("algsort.in");
ofstream out("algsort.out");
const int mx = 500100;
int v[mx];
void merge(const int *a, int size_a, const int *b, int size_b, int *c) {
int i = 0, j = 0, k = 0;
while (i < size_a && j < size_b) {
if (a[i] < b[j]) {
c[k++] = a[i++];
} else {
c[k++] = b[j++];
}
}
if (i < size_a) {
while (i < size_a) {
c[k++] = a[i++];
}
} else {
while (j < size_b) {
c[k++] = b[j++];
}
}
}
void sort(int *x, int l, int r) {
if (l >= r)
return;
int m = (l + r) / 2;
sort(x, l, m);
sort(x, m + 1, r);
int size_left = m - l + 1;
int size_right = r - m;
int aux[r - l + 1];
merge(x + l, size_left, x + m + 1, size_right, aux);
for (int i = l; i <= r; i++) {
x[i] = aux[i - l];
}
}
int main() {
int n;
in >> n;
for (int i = 0; i < n; i++) {
in >> v[i];
}
sort(v, 0, n - 1);
for (int i = 0; i < n; i++) {
out << v[i] << " ";
}
return 0;
}