Чи завжди у Quicksort є квадратичне виконання, якщо ви вибираєте максимальний елемент як опорний?


9

Якщо у вас є алгоритм швидкого сортування, і ви завжди вибираєте найменший (або найбільший) елемент як свій стрижень; Я маю рацію припускати, що якщо ви надасте вже відсортований набір даних, ви завжди отримаєте найгірші показники роботи незалежно від того, чи є ваш "вже відсортований" список у порядку зростання чи зменшення?

Думаю, що якщо ви завжди обираєте найменший елемент для свого стрижня, то, чи буде ваш "вже відсортований" вхід відсортований за зростанням чи низхідним значенням, не має значення, тому що підмножина, вибрана для сортування відносно вашого стрижня, завжди буде однаковий розмір?


2
Ваше мислення правильне, але ви також можете сперечатися безпосередньо і обчислити час запуску кваксорту в цьому випадку - ви отримаєте O(n2).
Yuval Filmus

Відповіді:


15

Найгірший складний випадок для кікспорта - це Θ(n2). Це досягається шляхом вибору опор, що розділяють набір таким чином, що одна група має лише одного члена. З поганим алгоритмом вибору зсуву, цього легко досягти, вибравши один кінець відсортованого набору. Ваше припущення правильне.


2
Краще було написати це: "... Це досягається шляхом вибору опор, які ділять набір таким чином, що в одній групі є лише член O (1)"

@Saeed Amiri: Це правильно, але краще бути точним.
MMS

1
@SaeedAmiri: O (1) вказує, що вона пропорційна 1, а значить, вона може бути k * 1. Фактично найгірший випадок досягається тоді, коли він рівно 1. Я дозволю вам, що O (1) все ще може призвести до O (n ^ 2).
walrii

@MMS, я писав O(1) якщо бути точним, walrii Ви писали: "Найгірший складний випадок для кваксорту Θ(n2) .. ", але насправді єдиний спосіб досягти Θ(n2) це не так, як ви сказали, так, так, як ви описали, це найгірший випадок у всьому, але не єдиний Θ(n2).

5

Так! Ти думаєш, що це абсолютно правильно! І як правильно зазначив Юваль Філіус, час роботи буде Θ(n2)


3

Один підрив буде мати 0 або 1 елемент, а інший матиме (n1)елементи; звідси так і єO(n2):

t(n)=t(n1)+t(0)+O(n)=O(n2)
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.