Pas de panique, on va tout reprendre depuis le début. Pour comprendre les algorithmes de recherche et de tri, tu as juste besoin de savoir ce qu'est une liste, une variable, une boucle et une condition. Si ces mots te disent quelque chose, on est sur la bonne voie. On va les réactiver ensemble et construire directement les deux premiers algorithmes. Tu vas voir, c'est plus simple que ça en a l'air.
Avant de plonger dans les algorithmes, on remet en place les briques de base que tout programme utilise.
Une variable : c'est comme une boîte qui porte un nom et qui contient une valeur (un nombre, un mot, vrai/faux...). On peut lire ce qu'il y a dedans, et on peut changer son contenu. Exemple : max ← 7 signifie qu'on met la valeur 7 dans la boîte nommée max.
Une liste : c'est une collection d'éléments rangés dans un ordre précis. Chaque élément a une position, qu'on appelle son indice. En pseudo-code, les indices commencent à 1. Par exemple, dans la liste L = [7, 2, 9], l'élément à l'indice 1 est 7, à l'indice 2 c'est 2, à l'indice 3 c'est 9.
Une boucle : c'est une structure qui répète un bloc d'instructions plusieurs fois. La boucle Pour i allant de 2 à n signifie qu'on va exécuter le bloc pour i = 2, puis i = 3, ..., jusqu'à i = n. La boucle Tant que répète tant qu'une condition est vraie.
Une conditionnelle : c'est un test qui permet de choisir entre deux actions. Si condition alors instruction exécute l'instruction seulement si la condition est vraie.
On a une liste de nombres. On veut trouver le plus grand. L'idée est simple : on prend le premier comme champion provisoire, puis on le compare à chacun des suivants. Dès qu'on en trouve un plus grand, il devient le nouveau champion. À la fin, le champion est le maximum de toute la liste.
Pseudo-code :
max ← L[1]
Pour i allant de 2 à n :
Si L[i] > max alors
max ← L[i]
Retourner maxLe nombre de comparaisons est toujours exactement n - 1, car on compare chaque élément (sauf le premier) au maximum courant.
On veut savoir si une valeur précise est présente dans la liste. On parcourt la liste du début à la fin. Dès qu'on trouve la valeur, on peut s'arrêter et dire qu'elle est là. Si on arrive au bout sans l'avoir trouvée, elle n'y est pas.
Pseudo-code :
trouvé ← Faux
Pour i allant de 1 à n :
Si L[i] = valeur alors
trouvé ← Vrai
Retourner trouvéLe nombre de comparaisons dépend de la position de l'élément cherché. Meilleur cas : 1 comparaison (l'élément est au début). Pire cas : n comparaisons (l'élément est absent ou tout à la fin).
Ah oui, c'est ça ! On se souvient : une variable pour stocker le maximum, une boucle pour parcourir la liste, une condition pour comparer. Maintenant on va structurer tout ça avec une vraie méthode pas-à-pas, et on ajoute le tri par sélection, qui est un peu le prolongement naturel de la recherche du minimum. Prêt à remettre de l'ordre dans tout ça ?
Pour appliquer l'algorithme de recherche du maximum à une liste $L$ de $n$ éléments :
Piège à éviter : ne jamais initialiser $max$ à 0. Si tous les éléments sont négatifs, 0 serait plus grand qu'eux, et le résultat serait faux. On initialise toujours avec $L[1]$.
Pour savoir si une valeur $v$ est dans la liste $L$ :
Le nombre de comparaisons varie : 1 si l'élément est en première position, $n$ s'il est absent ou en dernière position.
Le tri par sélection range une liste dans l'ordre croissant. L'idée : à chaque étape, on sélectionne le plus petit élément de la partie encore non triée, et on le place au début de cette partie.
Méthode pas-à-pas :
Erreur fréquente : confondre l'indice du minimum et sa valeur. $i_{\min}$ est un numéro de position, $L[i_{\min}]$ est la valeur à cette position. Pour l'échange, on utilise les indices, pas les valeurs.
Maintenant, on va faire de la répétition mécanique pour que les gestes deviennent automatiques. Cinq mini-exercices quasiment identiques : tu vas appliquer la recherche du maximum, la recherche d'un élément, et le tri par sélection sur des petites listes. À la fin, tu auras les réflexes.
On monte d'un cran. Ici, on va tracer des algorithmes plus complets, compléter des codes, et résoudre un petit problème. C'est exactement le type de questions que tu peux rencontrer en évaluation. Prends ton temps, sois méthodique, et vérifie chaque étape.
En algorithmique de recherche, on peut voir deux directions :
Le tri par sélection est un tri simple mais coûteux en nombre de comparaisons : pour une liste de $n$ éléments, il effectue toujours $\frac{(n-1)n}{2}$ comparaisons, soit environ $n^2/2$.
Tu maîtrises la recherche linéaire et le tri par sélection. L'an prochain, tu découvriras que chercher un élément dans une liste déjà triée peut être bien plus rapide avec la recherche dichotomique. On va aussi effleurer la notion de complexité algorithmique, qui permet de comparer l'efficacité des algorithmes entre eux. Prêt à voir plus loin ?
La complexité d'un algorithme mesure son efficacité en temps (ou en mémoire) quand la taille des données augmente. On l'exprime souvent en fonction de $n$, le nombre d'éléments.
Quand on double la taille de la liste, un algorithme linéaire prend environ 2 fois plus de temps ; un algorithme quadratique prend environ 4 fois plus de temps. C'est pour cela que pour de grandes listes, on préfère des algorithmes de tri plus rapides (comme le tri fusion, que tu verras en 1ère).
Quand une liste est triée, on peut chercher un élément beaucoup plus vite. Au lieu de parcourir du début à la fin, on compare l'élément cherché avec le milieu de la liste. S'il est plus petit, on cherche dans la moitié gauche ; s'il est plus grand, dans la moitié droite. On répète jusqu'à trouver ou jusqu'à ce que la zone de recherche soit vide.
Cet algorithme s'appelle la recherche dichotomique (du grec "dichotomia", couper en deux). Sa complexité est logarithmique : pour une liste de $n$ éléments, il faut environ $\log_2(n)$ comparaisons. Pour $n=1000$, $\log_2(1000) \approx 10$ comparaisons, contre 1000 en recherche linéaire. C'est colossal !
Fiche gratuite créée par Vidyalaya, association d'éducation populaire — soutien scolaire, FLE & DELF, libre et gratuit pour tous.
Tu bloques encore ? Écris-nous, on t'aide gratuitement : contact@vidyalaya.fr.
Fiche librement réutilisable sous licence CC BY-SA 4.0 — copiez, imprimez, adaptez, en citant Vidyalaya et en conservant la même licence.