Как вы знаете, на каждом рекурсивном шаге вы разбиваете массив. Поместите большую часть в стек, продолжайте работать над меньшей частью.
Поскольку тот, с кем вы продолжаете работать, меньше, он в два раза меньше того, с которым вы работали раньше. Таким образом, для каждого диапазона, который мы помещаем в стек, мы делим пополам размер диапазона, с которым работаем.
Это означает, что мы не можем поместить более чем log n
диапазонов в стек до того, как диапазон, с которым мы работаем, достигнет размера 1 (и, следовательно, будет отсортирован). Это ограничивает количество стека, необходимое для завершения первого спуска.
Когда мы начинаем обрабатывать «большие части», каждая «большая часть» B (k) больше, чем «малая часть» S (k), создаваемая в одно и то же время, поэтому нам может понадобиться больше стека для обработки B ( k) чем нам нужно было справиться с S (k). Но B (k) все еще меньше, чем предыдущая «малая часть», S (k-1), и как только мы обрабатываем B (k), , мы убрали его из стека , что следовательно, на один элемент меньше, чем при обработке S (k), и того же размера, что и при обработке S (k-1). Таким образом, у нас все еще есть наша граница.
Предположим, мы сделали это наоборот - нажмите на маленькую часть и продолжайте работать с большой частью. Затем в патологически неприятном случае мы каждый раз помещаем в стек диапазон 1
и продолжаем работать с размером всего на 2 меньше, чем предыдущий. Следовательно, нам потребуется n / 2
слотов в нашем стеке.