Pagini recente » Cod sursa (job #2267148) | Cod sursa (job #2255446) | Cod sursa (job #2219845) | Cod sursa (job #1874126) | Cod sursa (job #1189465)
#include <iostream>
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include <string.h>
#include <limits>
using namespace std;
#define MAXN 500001
#define INF numeric_limits<int>::max()
int A[MAXN];
void combine(int p, int r, int s, int t) {
int sizeL = r - p + 1, sizeR = t - s + 1;
int L[sizeL + 1], R[sizeR + 1];
memcpy(L, A + p, sizeof(L));
memcpy(R, A + s, sizeof(R));
L[sizeL] = INF, R[sizeR] = INF;
int left = 0, right = 0;
for (int i = p; i <= t; i++) {
if (L[left] < R[right]) {
A[i] = L[left];
left++;
} else {
A[i] = R[right];
right++;
}
}
}
void mergeSort(int start, int end) {
if (start >= end) {
return;
}
int mij = start + (end - start) / 2;
mergeSort(start, mij);
mergeSort(mij + 1, end);
combine(start, mij, mij + 1, end);
}
int main() {
freopen("algsort.in", "r", stdin);
freopen("algsort.out", "w", stdout);
int N;
scanf("%d", &N);
int x;
for (int i = 0; i < N; i++) {
scanf("%d", &x);
A[i] = x;
}
mergeSort(0, N - 1);
for (int i = 0; i < N - 1; i++) {
printf("%d ", A[i]);
}
printf("%d\n", A[N - 1]);
fclose(stdin);
fclose(stdout);
return 0;
}