V VIDYALAYA · Soutien scolaire
Mathématiques2ndeAlgorithmique et programmationFiche de cours

Algorithmes de recherche et tri simple

Parcourir, comparer, ordonner : les briques fondamentales de tout programme informatique.
1 L'idée

Un algorithme de recherche parcourt une liste pour en extraire une information : la valeur maximale, la position d'un élément donné, etc. Un algorithme de tri réorganise les éléments d'une liste dans l'ordre croissant (ou décroissant).

Ces algorithmes combinent trois structures fondamentales : variables, boucles (Pour, Tant que) et conditionnelles (Si … alors). En pseudo-code, les indices d'une liste de $n$ éléments vont de $1$ à $n$.

2 Recherche du maximum

On initialise une variable max avec le premier élément, puis on parcourt le reste de la liste : dès qu'on trouve un élément strictement plus grand, on met max à jour.

Pseudo-code :
max ← L[1]
Pour i allant de 2 à n :
    Si L[i] > max alors max ← L[i]
Retourner max

L'algorithme effectue exactement $n - 1$ comparaisons, quel que soit le contenu de la liste.

3 Recherche d'un élément

On parcourt la liste et on signale si un élément de valeur donnée est présent ou absent.

Pseudo-code :
trouvé ← Faux
Pour i allant de 1 à n :
    Si L[i] = valeur alors trouvé ← Vrai
Retourner trouvé

Meilleur cas : 1 comparaison (élément en L[1]). Pire cas : $n$ comparaisons (élément absent ou en dernière position).

4 Trace — tri par sélection sur $[4, 1, 3, 2]$
Étape 1 (i = 1)
Partie non triée : $[4, 1, 3, 2]$. Minimum = $1$ à l'indice 2.
Échange L[1] et L[2] → $[\mathbf{1},\; 4,\; 3,\; 2]$.
Étape 2 (i = 2)
Partie non triée : $[4, 3, 2]$. Minimum = $2$ à l'indice 4.
Échange L[2] et L[4] → $[1,\; \mathbf{2},\; 3,\; 4]$.
Étape 3 (i = 3)
Partie non triée : $[3, 4]$. Minimum = $3$ à l'indice 3. Déjà en place.
→ $[1,\; 2,\; \mathbf{3},\; 4]$. Tri terminé. Nombre total de comparaisons : $3+2+1 = 6$.
Méthode — appliquer le tri par sélection
  • Repérer la portion non triée : indices $i$ à $n$.
  • Trouver l'indice $i_{\min}$ du minimum de cette portion (boucle interne sur $j$ de $i+1$ à $n$).
  • Échanger $L[i]$ et $L[i_{\min}]$ (même si $i_{\min} = i$).
  • Incrémenter $i$ et recommencer jusqu'à $i = n - 1$.
Erreurs fréquentes
  • Initialiser max ← 0 au lieu de max ← L[1] : incorrect si tous les éléments sont négatifs.
  • Confondre indice et valeur : $i_{\min}$ est un indice, $L[i_{\min}]$ est la valeur à cet indice.
  • Oublier l'échange dans le tri par sélection et se contenter de mémoriser l'indice du minimum.
  • Démarrer la boucle à $i = 1$ au lieu de $i = 2$ dans la recherche du maximum : on compare L[1] avec lui-même.