Позволяет идти за строкой
- Сначала ваша функция сортировки будет запущена для аргументов 0 и 10, это будет первый вызов этой функции.
- Из строки
if(low < high)
Поскольку 0 <10, то в середине будет 5: из-за <code>mid = (low + high) / 2;.
- Теперь снова будет выполняться функция сортировки для аргументов 0 и 5, это будет второй вызов этой функции, но помните, что первый вызов все еще не завершил свою работу.
- Так как 0 <5, то середина будет 2. </li>
- Теперь снова функция сортировки будет работать на этот раз для аргументов 0 и 2, это будет третий вызов, а вторая функция останется работать.
- , поскольку 0 <2 mid будет 1. </li>
- Теперь снова функция сортировки будет запущена на этот раз для аргументов 0 и 1, это будет четвертый вызов, а третий вызов функции останется работать.
- , поскольку 0 <1 середина будет 0. </li>
- Теперь снова функция сортировки будет запущена на этот раз для аргументов 0 и 0, это будет пятый вызов, и четвертый вызов функции будет работать.
- , поскольку 0 <0 теперь ложно, будет выполнен обратный вызов в else, и эта функция будет уничтожена. Теперь элемент управления вернется к четвертому вызову, который работал для аргументов 0 как низкий и 1 как высокий. </li>
- Теперь из пятой строки
sort(mid+1, high);
вашего кода будет вызываться снова на этот раз для low = 1 и high также = 1.
- Теперь снова будет вызвана функция сортировки, и это шестой вызов, и на этот раз она будет выполняться для аргументов low = 1 и high = 1, и она начнет выполняться с первой строки вашего кода.
Считайте это стеком: сначала нажмите sort(0,10)
, затем => sort(0,5)
, затем => sort(0,2)
, затем => sort(0,1)
, затем => sort(0,0)
Теперь, когда sort(0,0)
завершил выполнение, он будет удален из стека и sort(0,1)
продолжится.
Так должно выглядеть вот так
sort(0,10)
=> sort(0,5)
=> sort(0,2)
=> sort(0,1)
Снова в пятой строке sort(0,1)
есть вызов sort()
, поэтому снова сортировка будет помещена в этот стек:
sort(0,10)
=> sort(0,5)
=> sort(0,2)
=> sort(0,1)
=> sort(1,1)
Это будет продолжаться, и, наконец, вызов к sort(0,10)
завершится, и вы получите желаемый результат.