Trier une liste

Algorithmes de tri

La principale motivation de pouvoir rechercher rapidement un élément dans une séquence. Quoi de plus rapide si cette même séquence est triée ?

Activité (par groupe de 2-3 élèves ou seul en utilisant CECI1)

Vous disposez de 10 cartes.

» Objectif final

Votre objectif est de déterminer une stratégie claire, précise et explicitée à l’écrit, c’est à dire le déroulé écrit des actions élémentaires à réaliser, afin d’obtenir des cartes triées suivant leur valeur faciale (par exemple \(\text{As}<2 \text{ et Valet} >5 \)) à la fin du processus.

» Actions possibles

Les seules actions élémentaires autorisées sont :

  • choisir deux cartes;
  • comparer deux cartes;
  • échanger la position de deux cartes;
  • compter le nombre de comparaisons effectuées.

» Début des hostilités:

Le processus débute par:

  • la mise en place de la stratégie que vous affinerez au fur et à mesure de vos tests;
  • la désignation du rôle de chacun dans le groupe lors de l’exécution de la stratégie définie préalablement;
  • puis le mélange des cartes retournées.

Dans chaque groupe, à chaque tour:

  • la personne préposée désigne les deux cartes à comparer: il a interdiction de les retourner et a fortiori de connaître les valeurs des cartes;
  • une personne est préposée à comparer les deux cartes qu’on lui désigne: lui seul à le droit de les retourner et de connaître les valeurs des cartes;
  • un dernière personne décompte le nombre de comparaisons effectuées tout en veillant à vérifier le bon respect du rôle de chacun.

Quelques algorithmes de tri à maîtriser

Pour fixer, tous les algorithmes de tri décrits ci-dessous prennent en :

  • Entrée : alignement de \(N\) cartes repérées par leur position à partir de la gauche de \(0\) à \(N-1\).
  • Sortie : les mêmes cartes alignées de la plus petite valeur faciale à la plus grande.

Le tri par sélection:


En français
En pratique ?
Impémentation en Python
Validité des algorithmes
Complexité de l'algorithme

Le tri par insertion:


En français
En pratique ?
Impémentation en Python
Validité des algorithmes
Complexité de l'algorithme

Remarques:

  1. On peut ordonner des chaînes de caractères. L’ordre est donné par l’ordre alphabétique défini par le tableau d’encodage (voir 2.1). Les caractères numériques sont placés avant les caractères aphabétiques, les majuscules avant les minuscules, …

    Pour en comparer deux, on compare en premier lieu leur premier caractère, en cas d’égalité le suivant, ect …

    Exemple:

>>> liste = ["NSI", "Nsi", "nsi", "3", str(12)]
>>> tri_selection(liste)
>>> liste
['12', '3', 'NSI', 'Nsi', 'nsi']
  1. Dans Python, sont intégrées une fonction de tri sorted() (qui retourne une nouvelle liste triée), ainsi que la méthode sort() (où le tri est un effet de bord).

    Exemple d’usage:

>>> liste = ["NSI", "Nsi", "nsi", "3", str(12)]
>>> sorted(liste)
['12', '3', 'NSI', 'Nsi', 'nsi']
>>> liste
["NSI", "Nsi", "nsi", "3", str(12)]
>>> liste.sort()
>>> liste
['12', '3', 'NSI', 'Nsi', 'nsi']
Notes de bas de page:

  1. Fruit du travail de Nicolas Belin (enseignant). ↩︎