Première · Algorithmique

Le tri par sélection

Pour ranger des cartes, on peut chercher la plus petite puis la placer au début, et recommencer sur celles qui restent. Le tri par sélection transforme cette idée en une procédure dont chaque étape agrandit une partie définitivement triée.

SofienAvec SofienIngénieur et enseignant en informatique
Dans ce chapitre

Un cap pour ce chapitre

Ce que vous saurez faire

  • Exécuter et programmer le tri par sélection.
  • Formuler un invariant et justifier la terminaison.
  • Compter les comparaisons et expliquer le coût quadratique.
Les bases utiles pour commencer

Choisir le minimum restant

Au passage d’indice i, les cases avant i sont déjà à leur place définitive. On cherche l’indice du minimum parmi les cases allant de i à la fin. Un échange place ce minimum en i. On poursuit avec i + 1. Pour [5, 2, 4, 1], le premier minimum est 1 à l’indice 3 : l’échange produit [1, 2, 4, 5].

Le tableau peut sembler déjà trié après un échange, mais cette version de l’algorithme poursuit ses recherches. Il ne suffit pas d’observer l’apparence des données pour modifier une procédure sans analyser ce qui garantit son résultat.

Pour visualiser le mécanisme, placez une frontière avant la case i. À gauche, on ne touche plus aux valeurs. À droite, on effectue une recherche complète, même si le premier candidat semble petit. Sur [2,3,6,8,5] au passage 1, le minimum restant est déjà 3 : la frontière avance sans échange effectif. Une absence d’échange ne signifie donc pas une absence de travail.

Mémoriser un indice, pas déplacer à chaque comparaison

La recherche conserve l’indice du plus petit élément rencontré dans la zone non triée. Quand une valeur plus petite apparaît, on modifie cet indice. L’échange n’a lieu qu’après la fin de la recherche. Cette séparation rend l’algorithme lisible : comparer sélectionne le candidat ; échanger le place.

On initialise m à i puisque le candidat initial appartient à la zone étudiée. Commencer toujours à zéro risquerait de reprendre un élément déjà placé. Une égalité peut conserver le premier candidat en utilisant strictement < ; le tri restera correct en présence de doublons.

def tri_selection(t):
    for i in range(len(t) - 1):
        m = i
        for j in range(i + 1, len(t)):
            if t[j] < t[m]:
                m = j
        t[i], t[m] = t[m], t[i]

Pourquoi le résultat est trié

Un invariant décrit le début de chaque passage : le préfixe avant i est trié et contient les i plus petites valeurs du tableau initial, avec leurs répétitions. Initialement, ce préfixe est vide, donc la propriété est vraie. Placer le minimum restant ajoute exactement la prochaine valeur attendue et conserve l’ordre.

Après n - 1 passages, une seule valeur reste ; elle est nécessairement la dernière. Les échanges préservent les données : aucune valeur n’est créée ou supprimée. Il faut ces deux idées pour prouver un tri : l’ordre du résultat et la conservation du contenu initial.

La conservation porte sur les occurrences, pas uniquement sur l’ensemble des valeurs distinctes. Les tableaux [1,1,3] et [1,3,3] ont le même ensemble de valeurs, mais pas le même contenu à trier. Un échange conserve chaque occurrence. Cette propriété reste vraie à tous les passages, y compris lorsque deux valeurs égales se trouvent à des positions différentes.

Un coût indépendant de l’ordre initial

La première recherche compare n - 1 candidats au minimum courant, la suivante n - 2, jusqu’à 1. Le total est n(n - 1) / 2 comparaisons de valeurs. Il est quadratique et reste identique sur un tableau déjà trié dans cette version. Les boucles sont bornées, donc elles se terminent.

Le nombre d’échanges effectifs peut être inférieur au nombre de passages lorsqu’un minimum est déjà bien placé. Il ne faut pas confondre ce nombre avec celui des comparaisons. Dans l’atelier, un passage dont m = i ne compte pas comme échange effectif, même si le code peut exécuter une affectation équivalente.

Exemple complet avec doublons

Trions [4,2,4,1]. Au passage 0, les trois comparaisons sélectionnent l’indice 3 ; l’échange produit [1,2,4,4]. Au passage 1, deux comparaisons laissent le minimum à l’indice 1. Au passage 2, une comparaison entre les deux 4 conserve l’indice 2 avec le test strict. Le résultat est trié après six comparaisons et un seul échange effectif.

Les répétitions ne nécessitent aucune suppression. La deuxième occurrence de 4 reste présente. Un candidat sélectionné au premier passage peut provenir de la toute dernière case : ne cherchez donc pas seulement un voisin plus petit. Le tri par sélection cherche le minimum de tout le suffixe, puis réalise un unique placement. Le tableau de trace doit indiquer la zone cherchée, l’indice retenu et l’état obtenu après l’échange.

Comparer la quantité de travail et l’ordre des égaux

Sur quatre valeurs, les tailles des recherches sont toujours 3, 2 et 1 comparaisons. Le total vaut 6 pour un tableau croissant, décroissant ou rempli de répétitions. En revanche, le nombre d’échanges effectifs dépend du placement initial. Ainsi, le tableau croissant conserve zéro échange mais paie tout de même les recherches.

Approfondissement : si les valeurs portent aussi des étiquettes, le tri par sélection classique ne garantit pas l’ordre initial des ex æquo. Avec [(2,A),(2,B),(1,C)], l’échange du premier et du dernier donne [(1,C),(2,B),(2,A)]. Les deux clés 2 ont inversé leur ordre. Le tri reste correct sur les clés, mais il n’est pas stable. Cette propriété supplémentaire doit être distinguée de l’ordre numérique et de la conservation des éléments.

À vous de faire varier les choses

Sélectionnez le minimum passage après passage

Saisissez jusqu’à dix entiers. Avancez les passages et comparez le tableau, les échanges et le nombre de comparaisons.

Lire le résultat de l’expérience initiale

1 passage(s) : [2, 3, 6, 8, 5]

Le préfixe placé contient les plus petites valeurs. Le compteur mesure les comparaisons de valeurs, pas les tests de boucle.

Passage iIndice sélectionnéAprès échange
032, 3, 6, 8, 5

Même lorsque le tableau devient trié rapidement, cette sélection continue à chercher les minima restants.

De la compréhension à l’autonomie

À vous de résoudre

Cherchez d’abord par vous-même. Vérifiez les résultats demandés, utilisez les indices si nécessaire, puis comparez votre méthode à la correction.

Exercice 1 · Appliquer#

Le premier passage

Effectuez le premier passage sur [8, 3, 6, 2, 5]. Quel indice est sélectionné et quel tableau obtient-on ?

Indice 1

Le minimum vaut 2.

Indice 2

Échangez uniquement la première case et la case du minimum.

Comprendre la correction

Le minimum est à l’indice 3. L’échange de 8 et 2 produit [2, 3, 6, 8, 5]. Les cases intermédiaires gardent leur valeur. La partie définitivement placée contient seulement 2, même si 3 semble déjà bien situé.

Exercice 2 · Calculer#

Compter sur cinq valeurs

Combien de comparaisons de valeurs cette version effectue-t-elle pour cinq éléments déjà triés ?

Indice 1

Les recherches parcourent encore toute la zone restante.

Indice 2

Additionnez 4, 3, 2 et 1.

Comprendre la correction

Elle effectue 10 comparaisons : 4 + 3 + 2 + 1. L’ordre initial ne change pas la longueur des recherches. Aucun échange entre cases distinctes n’est nécessaire, mais les comparaisons restent présentes ; ce sont deux indicateurs différents.

Exercice 3 · Corriger#

Un candidat mal initialisé

Au passage i = 2, un programme initialise m = 0. Expliquez le risque et donnez l’initialisation correcte.

Indice 1

Les deux premières cases sont déjà placées.

Indice 2

Le minimum doit être recherché dans la zone restante.

Comprendre la correction

La case 0 appartient à la partie triée. Son contenu peut être plus petit que toutes les valeurs restantes, ce qui conduirait à un échange détruisant le préfixe déjà construit. On initialise m = i, donc ici m = 2, puis on compare les cases suivantes.

Exercice 4 · Justifier#

Trier sans conserver les valeurs ?

Un programme remplace chaque case par son indice et obtient [0, 1, 2, 3]. Peut-on en conclure qu’il trie correctement tout tableau de quatre valeurs ?

Indice 1

Être ordonné ne suffit pas.

Indice 2

Comparez le contenu à celui d’un tableau initial comme [7, 7, 2, 9].

Comprendre la correction

Non. Un tri doit produire une permutation des valeurs initiales en conservant les répétitions. [0, 1, 2, 3] est ordonné mais ne conserve pas [7, 7, 2, 9]. Les échanges du tri par sélection garantissent cette conservation tout au long de l’exécution.

Exercice 5 · Approfondir et transférer#

Dérouler jusqu’au bout

Triez [6,1,5,1] par sélection avec test strict. Donnez les trois états de fin de passage, le nombre de comparaisons et le nombre d’échanges effectifs.

Indice 1

Le premier minimum rencontré est conservé en cas d’égalité.

Indice 2

Un minimum déjà à sa place ne produit pas d’échange effectif.

Comprendre la correction

Après passage 0 : [1,6,5,1]. Après passage 1 : [1,1,5,6]. Après passage 2 : même tableau. Les recherches effectuent 3+2+1=6 comparaisons et les deux premiers passages réalisent chacun un échange. Les répétitions sont conservées.

Exercice 6 · Approfondir et transférer#

Vérifier un tri annoncé

Un programme reçoit [3,1,3,2]. Il propose successivement les sorties [1,2,3,3], [1,2,2,3] et [1,3,2,3]. Pour chacune, vérifiez séparément ordre et conservation. Combien de sorties satisfont le contrat complet ?

Indice 1

Comptez les occurrences de chaque valeur.

Indice 2

Un résultat peut être une permutation correcte sans être ordonné.

Comprendre la correction

La première sortie est ordonnée et conserve les deux 3 : elle convient. La deuxième est ordonnée mais remplace un 3 par un 2. La troisième conserve toutes les occurrences mais présente 3 avant 2. Une seule sortie satisfait les deux conditions du tri.

Exercice 7 · Approfondir et transférer#

Une optimisation à justifier

Un élève propose d’arrêter dès qu’un passage ne fait aucun échange. Donnez un contre-exemple de trois valeurs, puis expliquez pourquoi le minimum bien placé ne prouve pas que le suffixe est trié. Comptez les comparaisons de la version normale sur votre exemple.

Indice 1

Placez la plus petite valeur au début et inversez les deux autres.

Indice 2

Le premier passage ne contrôle pas l’ordre relatif de toutes les paires restantes.

Comprendre la correction

Sur [1,3,2], le premier passage garde 1 sans échange, mais 3 et 2 restent inversés. Arrêter laisserait donc le tableau non trié. La version complète effectue 2+1=3 comparaisons et place 2 au second passage. L’invariant garantit le préfixe seulement.

Les erreurs qui méritent un détour

Échanger dès qu’une valeur plus petite apparaît.
Cela correspond à une autre procédure. Dans la sélection étudiée, on finit d’abord la recherche du minimum.
Dire « la première partie est triée » sans préciser son contenu.
Pour garantir l’extension du tri, elle doit contenir les plus petites valeurs de tout le tableau.

La fiche à garder

L’essentiel à retenir

  • Chaque passage place le minimum de la zone restante.
  • Les échanges conservent les valeurs et leurs répétitions.
  • Le nombre de comparaisons vaut n(n - 1) / 2.

Cette notion au bac

Retrouvez ces idées dans un sujet complet, avec des indices, une correction expliquée et des ateliers.

Le prochain pas

Retrouver le catalogue de Première

Ce chapitre s’appuie sur le programme officiel de Première (PDF, nouvel onglet). Les explications et exercices sont proposés pour l’apprentissage.