Относительно вашего конкретного вопроса: a
- это массив из 5 элементов с индексами 0, 1, 2, 3, 4
, поэтому a[4]
- последний элемент.Вы начинаете с m_sort(0, 10 - 1) = m_sort(0, 9);
.В m_sort()
вы вычисляете
mid = (right + left) / 2 = (9 + 0) / 2 = 4
и звоните
merge(left, mid + 1, right) = merge(0, 4 + 1, 9) = merge(0, 5, 9).
В merge(int left, int mid, int right)
вы оцениваете:
if (a[left] <= a[mid]) i.e. if (a[0] <= a[5])
, поэтому вы получаете доступ к a[5]
, которыйвне границ.
Я думаю, что ваша сортировка слиянием может быть значительно упрощена.Вы можете посмотреть на многочисленные ресурсы в Интернете или в учебнике по алгоритмам.