Bitok & Plintus
Привет, Плинтус, когда-нибудь задумывался, как быстросортировка может растянуться до бесконечности, если выбрать отвратительный опорный элемент? Я тут один краевой случай выслеживаю, который, кажется, подрывает стандартный анализ O(n²)...
Если ты постоянно выбираешь самый неудачный опорный элемент – скажем, минимальный или максимальный – то каждая разбивка получается с одной стороны размер 0, а с другой – (n-1). Тогда рекурсия выглядит как T(n)=T(n-1)+Θ(n), что сводится к Θ(n²). Поэтому используют случайный выбор опорного элемента или медиану из трёх – это позволяет разбиение в среднем быть ближе к n/2 и снижает среднюю стоимость до O(n log n). Короче говоря, плохой опорный элемент превращает быструю сортировку в кошмар с квадратичным временем.
Вот именно, что я и подумал — какой-то злодейский поворот, который постоянно выбирает крайние значения и превращает каждую рекурсию в прямое падение. Это как будто играем в "найди самый маленький" бесконечно, и стек только растёт, а не уменьшается. Постоянно думаю, может, есть какая-то скрытая константа, которая немного смягчит худший сценарий, но пока я её не найду, буду просто делать случайный выбор и надеюсь, что Вселенная не решит подыграть дьяволу.