Ніколи не вибирайте фіксований шарнір - це може бути атаковано, щоб використовувати найгірший варіант виконання алгоритму O (n ^ 2), який просто вимагає неприємностей. Найгірший час виконання Quicksort відбувається, коли розділення призводить до одного масиву з 1 елемента та одного масиву n-1 елементів. Припустимо, ви вибрали перший елемент як свій розділ. Якщо хтось подає масив до вашого алгоритму, який знаходиться в порядку зменшення, ваш перший звіт буде найбільшим, тому все інше в масиві переміститься зліва від нього. Тоді, коли ви будете повторюватись, перший елемент знову стане найбільшим, тож ще раз ви покладете все ліворуч від цього тощо.
Кращою технікою є метод медіани-3, де ви вибираєте три елементи навмання і вибираєте середину. Ви знаєте, що обраний вами елемент не буде першим чи останнім, але також, за теоремою про центральну межу, розподіл середнього елемента буде нормальним, це означає, що ви будете прагнути до середини (а значить , n lg n час).
Якщо ви абсолютно хочете гарантувати O (nlgn) час виконання алгоритму, метод стовпців-5 для знаходження медіани масиву працює в O (n) час, а це означає, що рівняння повторення для quicksort в гіршому випадку буде бути T (n) = O (n) (знайти медіану) + O (n) (розділ) + 2T (n / 2) (повторити ліворуч і праворуч.) За теоремою магістра це O (n lg n) . Однак постійний коефіцієнт буде величезним, і якщо найгірший показник продуктивності є вашим головним питанням, використовуйте натомість сортування злиття, яке є лише трохи повільніше, ніж у середньому швидкості, і гарантує O (nlgn) час (і буде набагато швидше ніж ця кульгава серединна швидкість).
Пояснення алгоритму Медіани