#include #include void MergeSort(int A[], int l, int r, int B[]) { int m = (l + r) / 2; if (m - l > 0) { MergeSort(A, l, m, B); } if (r - m > 0) { MergeSort(A, m + 1, r, B); } int i = l; int j = m + 1; for (int k = l; k <= r; k++) { if ((i <= m && j > r) || ((i <= m && j <= r) && A[i] <= A[j])) { B[k] = A[i]; i++; } else { B[k] = A[j]; j++; } } for (int k = l; k <= r; k++) { A[k] = B[k]; } } int main() { int size; int res = scanf("%d", &size); if (res != 1) { fprintf(stderr, "Error reading size\n"); return 1; } int *arrayA = malloc(sizeof(int) * size); for (int i = 0; i < size; i++) { res = scanf("%d", &arrayA[i]); if (res != 1) { fprintf(stderr, "Error reading array element\n"); free(arrayA); return 1; } } int *arrayB = malloc(sizeof(int) * size); MergeSort(arrayA, 0, size - 1, arrayB); return 0; }