Quicksort a-t-il toujours un temps d'exécution quadratique si vous choisissez un élément maximum comme pivot?

9

Si vous disposez d'un algorithme de tri rapide et que vous sélectionnez toujours le plus petit (ou le plus grand) élément comme pivot; Ai-je raison de supposer que si vous fournissez un ensemble de données déjà trié, vous obtiendrez toujours les performances les plus défavorables, que votre liste «déjà triée» soit dans l'ordre croissant ou décroissant?

Ma pensée est que, si vous choisissez toujours le plus petit élément pour votre pivot, le fait que votre entrée `` déjà triée '' soit triée par ordre croissant ou décroissant n'a pas d'importance car le sous-ensemble choisi pour être trié par rapport à votre pivot sera toujours le même taille?

yoonsi
la source
2
Votre pensée est correcte, mais vous pouvez également argumenter directement et calculer le temps d'exécution du tri rapide dans ce cas - vous obtiendrez . O(n2)
Yuval Filmus

Réponses:

15

La complexité la plus défavorable pour le tri rapide est . Ceci est réalisé en choisissant des pivots qui divisent l'ensemble de telle sorte qu'un groupe n'a qu'un seul membre. Avec un mauvais algorithme de sélection de pivot, cela peut facilement être obtenu en choisissant une extrémité d'un ensemble trié. Votre hypothèse est correcte.Θ(n2)

walrii
la source
2
Il valait mieux l'écrire: "... Ceci est réalisé en sélectionnant des pivots qui divisent l'ensemble de telle sorte qu'un groupe n'a qu'un membre O (1)"
@Saeed Amiri: C'est vrai, mais il vaut mieux être précis.
MMS
1
@SaeedAmiri: O (1) indique qu'il est proportionnel à 1, ce qui signifie qu'il peut être k * 1. Le pire des cas est atteint quand il est exactement 1. Je vous accorde que O (1) peut toujours conduire à O (n ^ 2).
walrii
O(1)Θ(n2)Θ(n2)Θ(n2)
5

Θ(n2)

n0nChun
la source
3

01(n1)O(n2)

t(n)=t(n1)+t(0)+O(n)=O(n2)
sulava
la source