Un tri stable maintient l'ordre relatif des éléments qui ont la même clé. Par exemple, imaginez que votre ensemble de données contient des enregistrements avec un id d'employé et un nom. La première commande est:
1, Jim
2, George
3, Jim
4, Sally
5, George
Vous souhaitez trier par nom. Un tri stable permettra d'organiser les éléments dans cet ordre:
2, George
5, George
1, Jim
3, Jim
4, Sally
Notez que les enregistrements en double pour "George" sont dans le même ordre relatif comme ils l'étaient dans la liste initiale. Même avec les deux "Jim" des dossiers.
Un tri instable pourrait arranger les éléments comme ceci:
5, George
2, George
1, Jim
3, Jim
4, Sally
Heapsort n'est pas stable parce que les opérations sur le tas peut changer l'ordre relatif des éléments égales. Pas tous les Quicksort implémentations sont stables. Cela dépend de comment mettre en œuvre le partitionnement.
Bien que Heapsort a un pire des cas, la complexité de l' O(n log(n))
, qui ne raconte pas toute l'histoire. Dans le monde réel de la mise en œuvre, il y a constamment des facteurs que l'analyse théorique ne prend pas en compte. Dans le cas de Heapsort vs Quicksort, il s'avère qu'il existe des moyens (médiane de 5, par exemple) pour Quicksort pire des cas très rares en effet. En outre, le maintien d'un segment n'est pas libre.
Étant donné un tableau avec une distribution normale, Quicksort et Heapsort permettra à la fois de s'exécuter en O(n log(n))
. Mais Quicksort s'exécutera plus rapidement en raison de sa constante des facteurs de plus petite taille que les facteurs constants pour Heapsort. Pour le dire simplement, le partitionnement est plus rapide que le maintien de la tas.