Pagini recente » Cod sursa (job #1403951) | Cod sursa (job #2475441) | Cod sursa (job #2370182) | Cod sursa (job #2346620) | Cod sursa (job #1742407)
#include <bits/stdc++.h>
#define NMAX 500001
using namespace std;
int N, values[NMAX], temp[NMAX];
void mergeSort(int* values, int left, int right) {
if (left == right) {
return;
}
int middle = left + (right - left) / 2;
mergeSort(values, left, middle);
mergeSort(values, middle + 1, right);
int l = left, m = middle + 1, t = left;
while (l <= middle && m <= right) {
if (values[l] < values[m]) {
temp[t++] = values[l];
++l;
} else {
temp[t++] = values[m];
++m;
}
}
while(l <= middle) temp[t++] = values[l++];
while(m <= right) temp[t++] = values[m++];
for (l = left; l <= right; ++l) values[l] = temp[l];
}
int main() {
freopen("algsort.in", "r", stdin);
freopen("algsort.out", "w", stdout);
scanf("%d", &N);
for (int it = 0; it < N; ++it) {
scanf("%d", &values[it]);
}
mergeSort(values, 0, N - 1);
for (int it = 0; it < N; ++it) printf("%d ", values[it]);
return 0;
}