Ne choisissez jamais un pivot fixe - il peut être attaqué pour exploiter le pire cas O(n) de votre algorithme. 2 ), ce qui ne fait qu'attirer les ennuis. Le pire temps 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 fournit à votre algorithme un tableau qui est dans l'ordre décroissant, votre premier pivot sera le plus grand, donc tout le reste du tableau se déplacera à sa gauche. Puis, lors de la récurrence, le premier élément sera à nouveau le plus grand, de sorte qu'une fois de plus, vous placerez tout à sa gauche, et ainsi de suite.
Une meilleure technique est le méthode de la médiane de 3 où vous prenez trois éléments au hasard et choisissez le milieu. Vous savez que l'élément que vous choisissez ne sera ni le premier ni le dernier, mais aussi, par le théorème de la limite centrale, que la distribution de l'élément du milieu sera normale, ce qui signifie que vous aurez tendance à vous diriger vers le milieu (et donc vers un temps nlog(n)).
Si vous voulez absolument garantir un temps d'exécution de l'algorithme de O(nlog(n)), l'option 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 quicksort dans le pire des cas sera :
T(n) = O(n) (find the median) + O(n) (partition) + 2T(n/2) (recurse left and right)
Par le théorème du maître, c'est O(nlog(n)). Cependant, le facteur constant sera énorme, et si la performance dans le pire des cas est votre principale préoccupation, utilisez un tri par fusion à la place, qui est seulement un peu plus lent que le quicksort en moyenne, et garantit un temps O(nlog(n)) (et sera beaucoup plus rapide que ce quicksort médian boiteux).
Explication de l'algorithme de la médiane des médianes
0 votes
stackoverflow.com/questions/1688264/improving-the-quick-sort