Никогда никогда не выбрать фиксированный стержень - это может быть атакован использовать ваш алгоритм в худшем случае O (N ^ 2) во время выполнения, который просто напрашивается на неприятности. в худшем случае выполнения QuickSort происходит тогда, когда в разбиении результатов в одном массиве из 1 элемента, и один массив из п-1 элементов. Предположим, вы выбрали первый элемент в качестве вашего раздела. Если кто-то питает массив к вашему алгоритму, который в порядке убывания, ваш первый стержень будет самым большим, так что все остальное в массиве будет двигаться слева от него. Затем, когда вы рекурсия, то первый элемент будет самым большим снова, так что еще раз вы положили все, слева от него, и так далее.
Лучший методом является медиана из-3 метод, в котором вы выбираете три элемента случайным образом, и выбрать середину. Вы знаете, что элемент, который вы выбираете не будет первым или последним, но и, по центральной предельной теореме, распределение среднего элемента будет нормально, это означает, что вы будете склонны к середине (и, следовательно, , п Л.Г. п раз).
Если вы абсолютно хотите, чтобы гарантировать O (nlgn) выполнения для алгоритма, метод колонок-из-5 для нахождения медианы массива работает в O (N) времени, что означает, что уравнение рекуррентное для сортировки в худшем случае будет быть Т (п) = о (п) (найти медиану) + о (п) (раздел) + 2T (п / 2) (Recurse влево и вправо.) мастером теоремы, это O (п Л.Г. п) , Тем не менее, постоянный множитель будет огромным, а если худший случай производительность ваша главной задача, использовать слияние сортируемых, что лишь немного медленнее, чем быстрая сортировка в среднем, и гарантирует O (nlgn) время (и будет намного быстрее чем эта хромая срединной сортировка).
Объяснение алгоритма выбора алгоритма