web-dev-qa-db-fra.com

Qu'est-ce que cela signifie pour un algorithme de tri d'être "stable"?

En lisant les différents algorithmes de tri que j'ai vus, il a été mentionné que certains sont "stables" et d'autres non. Qu'est-ce que cela signifie et quels compromis sont impliqués sur cette base lors de la sélection d'un algorithme?

44
Daenyth

Un tri stable est celui qui préserve l'ordre d'origine de l'ensemble d'entrée, où l'algorithme de comparaison ne fait pas de distinction entre deux ou plusieurs éléments.

Considérons un algorithme de tri qui trie les cartes par rang, mais pas par couleur. Le tri stable garantira que l'ordre d'origine des cartes ayant le même rang est préservé; le type instable ne le sera pas.

enter image description here

90
Robert Harvey

Des algorithmes stables préservent l'ordre relatif des éléments.

Ainsi, un algorithme de tri stable conservera l'ordre relatif des valeurs qui se comparent comme égales.

Considérons un algorithme de tri dans lequel nous trions une collection de points 2D en fonction de leur dimension X.

Collection à trier: {(6, 3), (5, 5), (6, 1), (1, 3)}

Stable trié: {(1, 3), (5, 5), (6, 3), (6, 1)}

Ordinaire trié: {(1, 3), (5, 5), (6, 3), (6, 1)} ou {(1, 3), (5, 5), (6, 1), (6, 3)}


Quant au compromis ... eh bien, un tri stable est moins efficace, mais parfois vous en avez besoin.

Par exemple, lorsqu'un utilisateur clique sur l'en-tête d'une colonne pour trier les valeurs dans une interface utilisateur, il est raisonnable de s'attendre à ce que son ordre de tri précédent soit utilisé dans le cas de valeurs égales.

26
QuestionC