Ce sont des exemples d'algorithmes permettant de trier une pile de cartes avec de nombreux numéros différents, de manière à ce que les numéros soient en ordre.
Les joueurs commencent avec une pile de cartes qui n'ont pas été triées.
Premier algorithme
Cet algorithme passe par la pile de cartes, une carte à la fois. Cette carte est comparée à la carte suivante de la pile. Veuillez noter que cette position ne change qu'à l'étape 6. Cet algorithme est appelé "tri à bulles". Il est lent.
- Si la pile de cartes est vide, ou si elle ne contient qu'une seule carte, elle est triée ; vous avez terminé.
- Prenez la pile de cartes. Regardez la première carte (le haut) de la pile.
- La carte que vous regardez est la carte A. La position où se trouve actuellement la carte A, est dans la pile P.
- S'il n'y a plus de cartes dans la pile après la carte A, passez à l'étape 8.
- La carte suivante dans la pile est la carte B.
- Si la carte B a un numéro inférieur à celui de la carte A, échangez les positions des cartes A et B. N'oubliez pas que c'est vous qui avez fait cela. Lorsque vous échangez des cartes, ne changez pas la position de la carte P.
- S'il y a une autre carte dans la pile après la position P, regardez-la ; retournez à l'étape 3.
- Si vous n'avez pas échangé la position des cartes lors du dernier tour, vous avez terminé ; la pile de cartes est triée.
- Sinon, retournez à l'étape 2.
Un exemple pas à pas
Prenons une pile de cartes avec les nombres "5 1 4 2 8", et trions la carte du plus petit au plus grand nombre en utilisant cet algorithme. À chaque étape, l'algorithme compare les éléments écrits en gras. Le haut de la pile de cartes se trouve sur le côté gauche.
Premier passage :
( 5 1 4 2 8 ) → {\displaystyle \to }
( 1 5 4 2 8 ) Ici, l'algorithme compare les deux premiers éléments et les échange.
( 1 5 4 2 8 ) → {\displaystyle \to }
( 1 4 5 2 8 )(
1 4 5 2 8 ) → {\displaystyle \to }
( 1 4 2 5 8 )(
1 4 2 5 8 ) → {\displaystyle \to }
( 1 4 2 5 8 ) Ces éléments sont déjà en ordre, donc l'algorithme ne les échange pas.
Deuxième passage :
( 1 4 2 5 8 ) → {\displaystyle \to }
( 1 4 2 5 8 )(
1 4 2 5 8 ) → {\displaystyle \to }
( 1 2 4 5 8 )(
1 2 4 5 8 ) → {\displaystyle \to }
( 1 2 4 5 8 )(
1 2 4 5 8 ) → {\displaystyle \to }
( 1 2 4 5 8 )
Maintenant, la pile de cartes est déjà triée, mais notre algorithme ne le sait pas. L'algorithme a besoin d'un passage complet sans échange pour savoir qu'il est trié.
Troisième passage :
( 1 2 4 5 8 ) → {\displaystyle \to }
( 1 2 4 5 8 )(
1 2 4 5 8 ) → {\displaystyle \to }
( 1 2 4 5 8 )(
1 2 4 5 8 ) → {\displaystyle \to }
( 1 2 4 5 8 )(
1 2 4 5 8 ) → {\displaystyle \to }
( 1 2 4 5 8 )
Enfin, le tableau est trié, et l'algorithme peut s'arrêter.
Histoire
Il s'agit d'un algorithme de tri facile à comprendre. Les informaticiens l'ont appelé tri à bulles, car les éléments les plus petits montent au sommet, changeant leur position à chaque passage. Malheureusement, l'algorithme n'est pas très bon, car il faut beaucoup de temps (beaucoup passent dans la pile de cartes) pour le trier.
Deuxième algorithme
Cet algorithme utilise une autre idée. Il est parfois difficile de résoudre un problème, mais le problème peut être modifié de manière à ce qu'il soit composé de problèmes plus simples et plus faciles à résoudre. C'est ce qu'on appelle la récursion. Il est plus difficile à comprendre que le premier exemple, mais il donnera un meilleur algorithme.
Idée de base
- Si la pile ne contient pas de cartes ou n'en contient qu'une seule, elle est triée et vous avez terminé.
- Séparez la pile de cartes en deux moitiés de même taille environ. S'il y a un nombre impair de cartes, une des deux piles aura une carte de plus que l'autre.
- Triez chacune des deux piles à l'aide de cet algorithme (Pour chaque pile, commencez au point 1 de cette liste).
- Fusionnez les deux piles triées ensemble, comme décrit ci-dessous.
- Le résultat est une pile de cartes triées. Vous avez terminé.
Fusionner deux piles ensemble
Cela fonctionne avec deux piles de cartes. L'une d'elles s'appelle A, l'autre B. Il y a une troisième pile qui est vide au début, appelée C. À la fin, elle contiendra le résultat.
- Si la pile A ou la pile B est vide, placez toutes les cartes de la pile qui n'est pas vide sur la pile C ; vous avez terminé, la pile C est le résultat de la fusion. (Note : prenez toute la pile, et mettez-la sur la pile C ; le faire carte par carte changera l'ordre et ne fonctionnera pas comme il se doit).
- Regardez les cartes du haut de la pile A et de la pile B. Placez celle qui porte le numéro le plus bas sur la pile C. Si la pile C ne contenait aucune carte, elle n'en aura plus qu'une.
- Si la pile A ou la pile B a encore des cartes, retournez à l'étape 1 pour les trier.
Histoire
John von Neumann a développé cet algorithme en 1945. Il ne l'a pas appelé Tri par numéros, mais Mergesort. C'est un très bon algorithme de tri, comparé à d'autres.
Troisième algorithme
Le premier algorithme prend beaucoup plus de temps que le second pour trier les cartes, mais il peut être amélioré (rendu meilleur). En examinant le tri par bulles, on peut remarquer que les cartes avec des nombres élevés se déplacent du haut de la pile assez rapidement, mais que les cartes avec des nombres faibles en bas de la pile mettent beaucoup de temps à monter (se déplacer vers le haut). Pour améliorer le premier algorithme, voici l'idée :
Plutôt que de comparer deux cartes côte à côte, on choisit au départ une carte "spéciale". Toutes les autres cartes sont ensuite comparées à cette carte.
- Nous commençons par une pile A. Il y aura deux autres piles B et C, qui seront créées plus tard.
- Si la pile A n'a pas de cartes, ou n'en a qu'une seule, le tri est terminé.
- Une carte est prélevée sur la pile A, si possible au hasard. C'est ce qu'on appelle un pivot.
- Toutes les cartes restantes de la pile A sont comparées à ce pivot. Les cartes avec un nombre inférieur vont dans la pile B, celles avec un nombre égal ou supérieur vont dans la pile C.
- S'il y a des cartes dans les piles B ou C, ces piles doivent être triées avec le même algorithme (Commencez à la pos. 1 de cette liste pour les piles B et C à tour de rôle).
- C'est fait. La pile de cartes triée comporte d'abord la pile triée B, puis le pivot, et enfin la pile triée C.
Histoire
Cet algorithme a été développé par C. A. R. Hoare en 1960. C'est aujourd'hui l'un des algorithmes de tri les plus utilisés. Il est appelé Quicksort.