¿Cuál es mi concepto erróneo con respecto al algoritmo de clasificación de fusión aquí?

Supongamos que llama al procedimiento merge_sort por primera vez con low = 0 y high = n , donde n> 0 . La cláusula if es verdadera, por lo que mid se calcula y merge_sort se llama recursivamente con un nuevo conjunto de valores donde low = low pero high = mid .

Como puede imaginar, eventualmente llegaremos al caso donde bajo es igual a alto . Por ejemplo, cuando low es 0 y high es 1, mid toma el valor 0. Llamaré a este conjunto particular de valores como A. Por lo tanto, la llamada a la función se ve como merge_sort (0,0) . Obviamente, la cláusula if es falsa aquí, por lo que la función regresa. Regresa a donde? Regresa al procedimiento que lo llamó, el procedimiento padre con el conjunto de valores A.

Ahora, su programa recuerda las líneas que se han ejecutado. Como tal, pasamos a la siguiente línea, que es merge_sort (1,1) (línea 8). Esto sigue y sigue para el resto de las funciones de manera similar.

Si ayuda, puede imaginar que las llamadas recursivas sean un árbol donde cada nodo es llamada de función y sus hijos son funciones dentro del procedimiento padre. Las funciones secundarias de un padre particular se denominan de amplitud. Cada rama de un árbol termina cuando llegamos a un nodo hoja, un nodo que no tiene hijos porque no cumple con la cláusula if.

Debe comprender que cuando la condición no se cumple, no sale de todas las funciones que la llamaron.
Cuando sale la función de nivel n, pasa a la función de nivel n-1 y llama a la segunda función merge_sort. Entonces sucede lo mismo para el segundo merge_sort. Cuando la función vuelve a ese nivel después de completar las funciones de nivel inferior, pasa a la fusión de la función de nivel n-1. Cuando se completa esta función, vuelve a la función de fusión de nivel n-2.

Tomando el mismo ejemplo que Pratyush, bajo = 0 y alto = 2,
merge_sort (0,2) Nivel 0
merge_sort (0,1) Nivel 1
merge_sort (0,0) Nivel 2 <- Cuando esto no satisface la condición, devuelve el control a merge_sort del Nivel 1 que a su vez llama
merge_sort (1,1) Level 2 <- Cuando esto no satisface la condición, nuevamente devuelve el control a merge_sort del Nivel 1 que ahora llama merge (0,1,1).

Espero que esto ayude.

La segunda y la tercera línea se ejecutan después de que se devuelven las llamadas respectivas para la primera línea.

Creo que tu confusión básica es sobre la recursividad.

Debe comprender cómo funciona la recursividad en general, no solo para el tipo de fusión. Intente usar el depurador, puede ayudar.