54 lines
968 B
C
54 lines
968 B
C
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
|
|
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;
|
|
}
|