KlarIA
💻 NSI (spécialité)1ereCours

Algorithmes sur les tableaux : parcours et tris

📖

Cours

Algorithmes sur les tableaux : parcours et tris

Un algorithme est une méthode précise pour résoudre un problème, indépendante du langage.

Ce chapitre étudie les algorithmes les plus courants sur les tableaux : le parcours séquentiel (rechercher une valeur, un maximum, calculer une moyenne), puis deux algorithmes de tri, par sélection et par insertion.

Au-delà du code, on apprend trois choses : prouver qu'un algorithme est correct avec un invariant de boucle, justifier sa terminaison, et évaluer son coût.

1. Le parcours séquentiel

1.1 Rechercher une occurrence

On veut savoir si une valeur v est dans un tableau t.

On compare v à chaque case, de gauche à droite, et on s'arrête dès qu'on la trouve.

La méthode fonctionne pour des valeurs de type quelconque : nombres, chaînes, p-uplets.

1.2 Extremum et moyenne

1.3 Coût linéaire

Pour la recherche, le pire cas est la valeur absente, ou placée en dernière position : il faut nn comparaisons.

Pour le maximum et la moyenne, il faut n1n - 1 ou nn opérations.

Comptons les comparaisons dans le pire cas, pour trois tailles de tableau.

2. Le tri par sélection

2.1 L'idée

Trier, c'est réordonner les éléments par ordre croissant.

Le tri par sélection construit la partie triée par la gauche.

Le programme affiche le tableau après chaque étape. Essaie avec d'autres tableaux.

À l'étape 00, le minimum 11 est échangé avec 55. À l'étape 11, le minimum 22 est déjà en place : rien ne bouge.

2.2 Invariant et correction

La preuve se rédige toujours en trois temps.

Initialisation. Pour i=0i = 0, la partie t[0..-1] est vide : la propriété est vraie.

Conservation. Supposons la propriété vraie au début de l'étape ii.

On place en t[i] le minimum de t[i..n-1].

Par l'invariant, il est supérieur ou égal à tous les éléments de t[0..i-1]. Par construction, il est inférieur ou égal à tous ceux de t[i+1..n-1].

Donc t[0..i] est trié et inférieur ou égal au reste : la propriété est vraie au début de l'étape i+1i + 1.

Conclusion. À la sortie de la boucle, t[0..n-2] est trié et inférieur ou égal à t[n-1] : le tableau entier est trié. L'algorithme est correct.

2.3 Terminaison et coût

Terminaison. Les deux boucles for sont bornées : le nombre de tours est fini, l'algorithme s'arrête toujours.

Coût. À l'étape ii, la recherche du minimum fait n1in - 1 - i comparaisons.

Au total : (n1)+(n2)++1=n(n1)2(n - 1) + (n - 2) + \cdots + 1 = \dfrac{n(n - 1)}{2} comparaisons, quel que soit l'état initial du tableau.

3. Le tri par insertion

3.1 L'idée

C'est la méthode du joueur de cartes.

Pour insérer 99, il n'y a rien à décaler. Pour insérer 11, il faut trois décalages.

3.2 Invariant et correction

Initialisation. Pour i=1i = 1, t[0..0] contient un seul élément : il est trié.

Conservation. La boucle while décale vers la droite les éléments de t[0..i-1] supérieurs à xx, qui restent dans le même ordre.

Elle place ensuite xx juste après le dernier élément inférieur ou égal à xx.

Donc t[0..i] est trié et contient les mêmes éléments.

Conclusion. À la fin, t[0..n-1] est trié.

3.3 Terminaison et coût

Terminaison. La boucle for est bornée. Dans la boucle while, j diminue de 11 à chaque tour et la boucle s'arrête au plus tard quand j vaut 1-1 : j est un variant.

Coût. Cette fois, il dépend du tableau.

Tableau de départComparaisonsCoût
déjà trié (meilleur cas)une par étape : n1n - 1linéaire
trié à l'envers (pire cas)1+2++(n1)=n(n1)21 + 2 + \cdots + (n-1) = \dfrac{n(n-1)}{2}quadratique
quelconque (en moyenne)environ la moitié du pire casquadratique

Vérifions-le en comptant les comparaisons sur 200200 éléments.

3.4 Comparer les deux tris

TriPire casMeilleur casÉcrituresAtout
sélectionn(n1)/2n(n-1)/2 comparaisonsn(n1)/2n(n-1)/2, toujoursau plus n1n - 1 échangespeu d'écritures
insertionn(n1)/2n(n-1)/2 comparaisonsn1n - 1 (déjà trié)jusqu'à n(n1)/2n(n-1)/2 décalagesrapide sur un tableau presque trié

Les deux tris sont quadratiques dans le pire cas : ils conviennent pour quelques milliers d'éléments.

Pour des millions d'éléments, on utilise des tris plus rapides, comme le tri fusion vu en terminale, ou la fonction sorted de Python, qui fait environ nlog2nn \log_2 n opérations.

Coût linéaire et quadratique

4. Exemple résolu pas à pas

Commence par la question a, que tu peux faire vérifier.

Correction · Question a : le coût

Il y a une comparaison par élément, donc nn comparaisons : le coût est linéaire.

Correction · Question b

Étape 00 : le minimum de [4, 8, 1, 6] est 11 (33 comparaisons). Après l'échange : [1, 8, 4, 6].
Étape 11 : le minimum de [8, 4, 6] est 44 (22 comparaisons) : [1, 4, 8, 6].
Étape 22 : le minimum de [8, 6] est 66 (11 comparaison) : [1, 4, 6, 8].
Total : 3+2+1=63 + 2 + 1 = 6 comparaisons, soit 4×32\dfrac{4 \times 3}{2}.

Correction · Question c

Insérer 88 : 11 comparaison avec 44, rien ne bouge.
Insérer 11 : comparé à 88 puis à 44, soit 22 comparaisons et 22 décalages : [1, 4, 8, 6].
Insérer 66 : comparé à 88 (décalage), puis à 44 (arrêt), soit 22 comparaisons : [1, 4, 6, 8].
Total : 55 comparaisons contre 66. L'insertion profite des parties déjà ordonnées.

Correction · Question d

Invariant : au début de l'étape ii, t[0..i-1] est trié.
Terminaison du while : j diminue de 11 à chaque tour et la boucle s'arrête dès que j < 0.
j est un variant : entier, strictement décroissant, minoré par 1-1.

À retenir

Révise ce chapitre avec KlarIA

Tuteur qui t'explique pas à pas, quiz pour t'entraîner, flashcards pour mémoriser. Gratuit.

Créer mon compte gratuitement