Необходимо проверить, имеет ли диапазон хотя бы 2 элемента:
/* sort a range of elements from `l` to `u` inclusively */
void merge_sort(int a[], int l, int u) {
if (l < u) {
int mid = l + (u - l) / 2;
merge_sort(a, l, mid);
merge_sort(a, mid + 1, u);
merge(a, l, mid, u);
}
}
Если верхняя граница u
не включена в диапазон, код следует изменить на:
/* sort a range of elements from `l` included to `u` excluded */
void merge_sort(int a[], int l, int u) {
if (u - l >= 2) {
int mid = l + (u - l) / 2;
merge_sort(a, l, mid);
merge_sort(a, mid, u);
merge(a, l, mid, u);
}
}