# Monde des tris

Ce monde vous donne les outils pour expérimenter les algorithmes de tris. On peut l'utiliser de deux manières différentes : la première est bien sûr d'écrire les algorithmes de tri demandés. Mais on peut aussi se contenter dans un premier temps de lancer la démo de chaque exercice et observer les algorithmes de tri fonctionner. Cela permet de mieux se rendre compte des différences d'efficacité entre eux.

## Méthodes disponibles pour les algorithmes de tri

Méthode | Action | Coût
[!java|c]int [/!]getNombreValeurs() [!scala]:Int[/!] | Retourne le nombre de valeurs dans le tableau | aucun
[!java]boolean [/!][!c]int [/!]plusPetit([!java|c]int [/!]i[!scala]:Int[/!], [!java|c]int [/!]j[!scala]:Int[/!]) [!scala]:Boolean[/!] | Retourne vrai si le contenu de la case i est strictement inférieur à celui de la case j | deux lectures
[!java]boolean [/!][!c]int [/!]plusPetitQue([!java|c]int [/!]i[!scala]:Int[/!], [!java|c]int [/!]value[!scala]:Int[/!])[!scala] :Boolean[/!] | Retourne vrai si le contenu de la case i est strictement inférieur à la valeur `value` | une lecture
[!java|c]void [/!]echange([!java|c]int [/!]i[!scala]:Int[/!], [!java|c]int [/!]j[!scala]:Int[/!]) | Échange le contenu de la case i avec celui de la case j | deux lectures, deux écritures
[!java|c]void [/!]copie([!java|c]int [/!]depuis[!scala]:Int[/!], [!java|c]int [/!]vers[!scala]:Int[/!]) | Copie le contenu de la case 'depuis' dans la case 'vers' | une lecture, une écriture
[!java|c]int [/!]getValeur([!java|c]int [/!]idx[!scala]:Int[/!]) | Retourne la valeur de la case idx | une lecture
[!java|c]void [/!]setValeur([!java|c]int [/!]idx[!scala]:Int[/!], [!java|c]int [/!]valeur[!scala]:Int[/!]) | Affecte la valeur '`valeur`' à la case 'idx' | une écriture
[!java]boolean [/!][!c]int [/!]estSelectionne() [!scala]:Boolean[/!] | Renvoi si le monde actuel est sélectionné dans l'interface graphique. | aucun

## Vue de l'historique du monde

Il ne suffit pas de trier le tableau pour passer les exercices. Votre solution doit suivre scrupuleusement le comportement attendu de chaque exercice. Ceci est vérifié en comptant le nombre d'opérations de lecture et d'écriture sur le tableau effectuées lors de ce tri. En cas de problème, il est souvent assez difficile de comprendre la différence entre le comportement attendu et le comportement effectif.

Pour cela, il est possible d'explorer graphiquement l'historique de n'importe quel monde de tri. Passez par exemple au monde Objectif et utilisez son menu contextuel (clic droit) pour choisir entre la vue de l'état courant du monde et la vue de son histoire.

La vue de l'historique n'est pas aussi complexe qu'elle en a l'air à première vue. Le temps s'écoule de gauche à droite, et les cases du tableau sont représentée de haut en bas. Les lignes de différentes couleurs qui serpentent représentent les différentes valeurs contenues dans le tableau. Quand deux lignes se croisent, cela signifie que les valeurs du tableau ont été échangées à ce moment de l'historique; un embranchement signifie que la valeur a été copiée; une valeur en violet suivie d'un point d'interrogation a été lue avec getValeur() et une valeur en rouge suivie d'un point d'exclamation a été écrite avec setValeur().

Cette vue, inspirée d'Aldo Cortesi, est très pratique pour comprendre le comportement des algorithmes de tri.