Ne choisissez jamais un pivot fixe - cela peut être attaqué pour exploiter le pire des cas d'exécution O (n ^ 2) de votre algorithme, ce qui ne demande que des problèmes. Le pire des cas d'exécution de Quicksort se produit lorsque le partitionnement donne un tableau de 1 élément et un tableau de n-1 éléments. Supposons que vous choisissiez le premier élément comme partition. Si quelqu'un alimente un tableau dans votre algorithme dans un ordre décroissant, votre premier pivot sera le plus grand, donc tout le reste du tableau se déplacera vers sa gauche. Ensuite, lorsque vous répétez, le premier élément sera à nouveau le plus grand, donc une fois de plus, vous mettez tout à gauche, et ainsi de suite.
Une meilleure technique est la méthode de la médiane sur 3, dans laquelle vous choisissez trois éléments au hasard et choisissez le milieu. Vous savez que l'élément que vous choisirez ne sera ni le premier ni le dernier, mais aussi, par le théorème de la limite centrale, la distribution de l'élément du milieu sera normale, ce qui signifie que vous allez tendre vers le milieu (et donc , n lg n fois).
Si vous voulez absolument garantir l'exécution O (nlgn) pour l'algorithme, la méthode des colonnes de 5 pour trouver la médiane d'un tableau s'exécute en temps O (n), ce qui signifie que l'équation de récurrence pour le tri rapide dans le pire des cas sera be T (n) = O (n) (trouver la médiane) + O (n) (partition) + 2T (n / 2) (récurer à gauche et à droite.) Par le théorème maître, c'est O (n lg n) . Cependant, le facteur constant sera énorme, et si le pire des cas est votre principale préoccupation, utilisez plutôt un tri par fusion, qui n'est qu'un peu plus lent que le tri rapide en moyenne, et garantit le temps O (nlgn) (et sera beaucoup plus rapide que ce tri rapide médian boiteux).
Explication de l'algorithme de la médiane des médianes