Ne jamais choisir un pivot fixe - ce qui peut être attaqué pour exploiter votre temps d'exécution pire des cas O de l'algorithme (n ^ 2), qui vient d'avoir des ennuis. pire temps d'exécution des cas de Quicksort se produit lorsque le partitionnement des résultats dans une gamme de 1 élément, et une rangée de n-1 éléments. Supposons que vous choisissez le premier élément que votre partition. Si quelqu'un alimente un tableau à votre algorithme qui est dans l'ordre décroissant, votre premier pivot sera le plus grand, donc tout le reste dans le tableau se déplace vers la gauche. Puis, quand vous RECURSE, le premier élément sera le plus grand encore, donc une fois de plus vous mettez tout à gauche de celui-ci, et ainsi de suite.
Une meilleure technique est la méthode médiane de-3, où vous choisissez trois éléments au hasard, et choisir le milieu. Vous savez que l'élément que vous choisissez ne sera pas le premier ou le dernier, mais aussi, par le théorème central limite, la répartition de l'élément central sera normal, ce qui signifie que vous aurez tendance vers le milieu (et par conséquent , n lg n fois).
Si vous voulez absolument garantir O (NLGN) l'exécution de l'algorithme, la méthode colonnes de-5 pour trouver la médiane d'un tableau passe en O (n), ce qui signifie que l'équation de récurrence pour quicksort dans le pire des cas sera être T (n) = O (n) (trouver la médiane) + O (n) (partition) + 2T (n / 2) (rECURSE gauche et à droite.) Par le théorème de Maître, c'est O (nlogn) . Cependant, le facteur constant sera énorme, et si pire performance de cas est votre principale préoccupation, utilisez un tri par fusion au lieu, qui est seulement un peu plus lent que quicksort en moyenne, et garantit O (NLGN) temps (et sera beaucoup plus rapide que ce quicksort médian boiteux).
Explication de la médiane de l'algorithme Médianes