#include #include #define MAX 65536 void merge(int arr[], int p, int q, int r) { int *left, *right; int n1, n2, i, j, k; n1 = q - p + 1; n2 = r - q; if ((left = (int *) malloc((n1 + 1) * sizeof(int))) == NULL) { perror("malloc error"); exit(1); } if ((right = (int *) malloc((n2 + 1) * sizeof(int))) == NULL) { perror("malloc error"); exit(1); } for (i = 0; i < n1; i++) { left[i] = arr[p + i]; } left[i] = MAX; for (i = 0; i < n2; i++) { right[i] = arr[q + i + 1]; } right[i] = MAX; i = 0; j = 0; for (k = p; (1); k++) { if (left[i] > right[j]) { (2); j++; } else { arr[k] = left[i]; i++; } } } void mergeSort(int arr[], int begin, int end) { int mid; if ((3)) { mid = (begin + end) / 2; mergeSort(arr, begin, mid); (4); merge(arr, begin, mid, end); } }