Я понимаю, как работает часть слияния сортировки слиянием, однако по какой-то причине я просто не могу обернуть голову вокруг рекурсивной / разделяющей части, которая происходит до вызова функции слияния. Используя приведенный ниже пример кода, я попытался отследить значение различных переменных, но не смог полностью понять, что происходит.
public void sort(int arr[], int l, int r) {
if (l < r)
{
// Find the middle point
int m = (l+r)/2;
// Sort first and second halves
sort(arr, l, m);
sort(arr , m+1, r);
// Merge the sorted halves
merge(arr, l, m, r);
}
}
Мне кажется, что m продолжает передаваться в сортировку до тех пор, пока он не станет 0, поэтому кажется, что 2-й вызов sort () и вызов merge () никогда не выполняются. Может кто-нибудь объяснить, какие шаги предпринимаются?