Numérique et sciences informatiques (spécialité) · TerminaleBac
Diviser pour régner et tri fusion : cours de Terminale NSI
Publié le 7 novembre 2026 · Mis à jour le 7 novembre 2026 · Signaler une erreur
L'essentiel
- Diviser pour régner : on découpe le problème en sous-problèmes plus petits, on les résout (souvent par récursivité), puis on combine les résultats 1.
- Trois phases : diviser, régner, combiner 2.
- Tri fusion : on coupe le tableau en deux moitiés, on trie chaque moitié récursivement, puis on fusionne deux listes triées en un seul parcours.
- Cas de base obligatoire : un tableau de 0 ou 1 élément est déjà trié, sinon la récursivité ne s'arrête jamais.
- Coût du tri fusion : environ niveaux, chacun coûtant de l'ordre de opérations, donc de l'ordre de , contre pour les tris simples.
Pourquoi découper un problème ?
Tu connais déjà plusieurs tris : le tri par sélection et le tri par insertion. Ils fonctionnent, mais lorsque le tableau double de taille, le temps de calcul est à peu près multiplié par quatre. On parle de temps quadratique, et c'est précisément le défaut que la méthode de ce chapitre permet de corriger 1.
L'idée est ancienne et très naturelle : devant un problème trop gros, on le coupe en morceaux plus petits, plus faciles à traiter, puis on recolle les réponses. Imagine que tu doives trier un paquet de mille copies par ordre alphabétique. Tu peux les trier une à une dans un seul tas, ou bien former dix paquets de cent copies, faire trier chaque paquet par des camarades, puis rassembler les paquets déjà triés. La seconde méthode est celle de l'algorithmique « diviser pour régner ».
Dans ce cours, tu vas :
- définir précisément la méthode et ses trois phases ;
- voir où elle apparaît en dehors des tris ;
- construire pas à pas le tri fusion en Python ;
- justifier son efficacité par un raisonnement sur le nombre d'opérations ;
- éviter les erreurs que l'on retrouve le plus souvent dans les copies de bac.
Tu as besoin de la récursivité et d'une bonne aisance avec les listes Python. Les arbres binaires vus avant ce chapitre te serviront d'image mentale : les appels récursifs du tri fusion forment justement un arbre.
La méthode en trois phases
- DiviserCouper en sous-problèmes plus petits
- RégnerRésoudre chaque sous-problème, souvent par récursivité
- CombinerAssembler les solutions partielles
Où rencontre-t-on cette méthode ?
Le tri n'est pas le seul domaine concerné. Plusieurs algorithmes classiques suivent le même schéma 2 :
- la rotation d'une image d'un quart de tour : on découpe l'image en carreaux de plus en plus petits, jusqu'à des carreaux d'un seul pixel 2 ;
- la recherche des deux points les plus rapprochés dans un ensemble de points 2 ;
- l'algorithme d'Euclide, qui fournit le PGCD de deux entiers : à chaque étape, on remplace les deux valeurs par des valeurs plus petites, ce qui revient à poser la même question sur des données réduites 2.
La ressource Éduscol consacrée à ce sujet présente trois exemples d'algorithmes de ce type, dont le tri fusion, et rappelle que la méthode permet d'éviter le temps quadratique obtenu avec des méthodes directes sur un tableau de nombres 1.
| Algorithme | Problème traité | Découpage |
|---|---|---|
| Tri fusion | Trier un tableau | Deux moitiés du tableau |
| Rotation d'image | Tourner une image d'un quart de tour | Carreaux de plus en plus petits, jusqu'au pixel |
| Points les plus rapprochés | Trouver les deux points les plus proches | Sous-ensembles de points |
| Algorithme d'Euclide | Calculer un PGCD | Nombres plus petits à chaque étape |
Le tri fusion : principe
Le tri fusion applique la méthode au problème « trier un tableau de nombres ». Voici comment les trois phases se traduisent.
- Diviser : on coupe le tableau en deux moitiés de tailles égales, à un élément près.
- Régner : on trie chacune des deux moitiés en appelant la même fonction. Un tableau vide ou d'un seul élément est déjà trié : c'est le cas de base.
- Combiner : on fusionne les deux moitiés triées en un unique tableau trié.
Tri fusion
- Diviser
- Deux moitiés
- Milieu = n // 2
- Régner
- Appels récursifs
- Cas de base : 0 ou 1
- Combiner
- Fusion de listes
- Un seul parcours
- Stable avec <=
- Coût
- log n niveaux
- n par niveau
- n log n au total
Le tri fusion en Python
Pourquoi le tri fusion est efficace
Compter précisément chaque instruction serait fastidieux. On compte plutôt le nombre d'opérations élémentaires dominantes, ici les comparaisons et les copies d'éléments. Pour une fusion de deux listes de tailles totales , chaque tour de boucle place un élément dans le résultat et en examine un autre au plus une fois : le coût est donc proportionnel à .
Démonstration · Coût du tri fusion pour $n = 2^k$
Notons le coût pour un tableau de taille , que l'on prend égale à une puissance de 2 pour simplifier : . On modélise la fusion par un coût de opérations et le cas de base par un coût nul : .
Pour , on trie deux moitiés de taille , puis on fusionne :
Divisons par et posons . On obtient
La suite est arithmétique de raison 1 : . Donc
Vérification : , , .
On peut aussi lire ce résultat sur l'arbre des appels. Il y a niveaux de fusions ; à chaque niveau, les fusions portent au total sur les éléments, donc coûtent au total. Le produit donne .
On dit que la complexité du tri fusion est en , alors que celle des tris par sélection et par insertion est en dans le pire cas.
Variantes, pièges et méthode d'examen
Exercices corrigés
Exercice 1 Fusionner deux listes triées à la main
On considère les listes triées et .
- Applique l'algorithme de fusion et écris la liste obtenue.
- Combien de comparaisons entre un élément de et un élément de as-tu effectuées ?
Indice 1
Garde deux indices et compare à chaque fois les éléments courants.
Indice 2
Quand une liste est épuisée, on ne compare plus : on recopie le reste.
Voir la correction pas à pas
On compare 3 et 5 : 3 passe. Comparaison n°1, résultat [3].
On compare 27 et 5 : 5 passe. Comparaison n°2, résultat [3, 5].
On compare 27 et 9 : 9 passe. Comparaison n°3.
On compare 27 et 10 : 10 passe. Comparaison n°4, résultat [3, 5, 9, 10].
On compare 27 et 82 : 27 passe. Comparaison n°5.
On compare 38 et 82 : 38 passe. Comparaison n°6.
On compare 43 et 82 : 43 passe. Comparaison n°7. La liste est épuisée.
On recopie le reste de : [82]. Résultat : [3, 5, 9, 10, 27, 38, 43, 82], obtenu en 7 comparaisons.
Chaque comparaison place un élément dans le résultat, sauf pour les éléments recopiés à la fin. Ici, 8 éléments au total et 1 recopié sans comparaison : 7 comparaisons. Dans le pire cas, une fusion de éléments demande comparaisons.
Exercice 2 Calculer un coût avec la relation de récurrence
On modélise le coût du tri fusion par et pour , .
- Calcule , , puis .
- Vérifie que ces valeurs coïncident avec .
Indice 1
Utilise chaque valeur pour calculer la suivante.
Indice 2
Pour , .
Voir la correction pas à pas
.
.
.
.
Comparaison avec : , , , . Les valeurs coïncident.
Le coût est bien : . Pour un tri quadratique, on aurait de l'ordre de opérations ; l'écart se creuse vite quand grandit.
Exercice 3 Comparer un tri quadratique et le tri fusion
Pour trier éléments, on estime le coût d'un tri quadratique à opérations et celui du tri fusion à opérations.
- Calcule chacun de ces deux coûts.
- Calcule le rapport entre le coût quadratique et le coût du tri fusion.
- Explique en une phrase pourquoi ce rapport augmente avec .
Indice 1
, donc .
Indice 2
Le rapport se simplifie : .
Voir la correction pas à pas
Coût quadratique : .
Coût du tri fusion : .
Rapport : .
Explication : le rapport vaut ; le numérateur croît bien plus vite que le logarithme, donc l'avantage du tri fusion grandit avec la taille du tableau.
Pour 1024 éléments, le tri fusion fait environ 100 fois moins d'opérations que le tri quadratique. Il s'agit d'un ordre de grandeur de modèles de coût, pas d'un chronométrage réel, qui dépend aussi de la machine et du langage.
Quiz
8 questions · correction immédiate · ton score reste sur ton appareil.
-
On découpe d'abord (diviser), on résout les sous-problèmes (régner), puis on assemble (combiner) 2. « Régner, diviser, combiner » inverse les deux premières phases : on ne peut pas résoudre des sous-problèmes avant de les avoir créés.
-
Un tableau de 0 ou 1 élément est déjà trié, on le renvoie tel quel. Avec
len(t) == 0seul, un tableau d'un élément serait recoupé en un tableau vide et lui-même : appels infinis.len(t) == 2laisserait les autres tailles sans réponse. -
Le découpage ne fait que séparer les éléments. Le cas de base ne trie rien non plus : un élément seul est déjà trié. C'est la fusion de deux listes triées qui construit des listes triées de plus en plus grandes.
-
Chaque tour de boucle place un élément dans le résultat et chaque élément n'est examiné qu'une fois : le coût est de l'ordre de . Il ne serait en que si l'on recommençait un parcours complet pour chaque élément, ce qui n'est pas le cas ici.
-
Il y a environ niveaux d'appels et chaque niveau coûte de l'ordre de . Ce n'est pas , coût des tris par sélection ou insertion. Ce n'est pas non plus : il faut bien examiner chaque élément à chacun des niveaux.
-
On divise par 2 à chaque niveau : , soit 4 découpages, ce qui correspond à . Compter 16 niveaux reviendrait à enlever un seul élément à chaque fois, ce qui n'est pas une division par deux.
-
, , puis , ce qui est bien . Répondre 64 serait calculer , c'est-à-dire le coût d'un tri quadratique.
-
Faux : le résultat reste trié, car lorsque deux éléments sont égaux l'ordre entre eux n'a aucune incidence sur le tri croissant. Ce qui change, c'est la stabilité : avec
<, l'élément de droite passe avant celui de gauche et l'ordre initial des éléments égaux n'est plus conservé.
Les questions qu'on se pose
Quelle différence y a-t-il entre diviser pour régner et la récursivité ?
La récursivité est une façon d'écrire une fonction qui s'appelle elle-même. Diviser pour régner est une stratégie de résolution en trois phases (diviser, régner, combiner) 2, qui s'écrit souvent de manière récursive. Une fonction récursive n'est pas forcément de type diviser pour régner : une factorielle réduit le problème de 1 à chaque appel au lieu de le couper en parties de taille comparable.
Pourquoi le tri fusion est-il plus rapide que le tri par insertion ?
Le tri par insertion peut déplacer chaque élément sur une distance proportionnelle à , d'où un coût en dans le pire cas. Le tri fusion ne compare jamais deux éléments inutilement : chaque niveau de fusion traite chaque élément une seule fois, et il y a seulement environ niveaux. Le coût total est de l'ordre de .
Le tri fusion est-il toujours le meilleur choix ?
Non. Il demande de la mémoire supplémentaire pour les listes intermédiaires, et sur de très petits tableaux le coût des appels récursifs peut dépasser le gain. En revanche, son coût en ne dépend pas de l'ordre initial des données, ce qui est un avantage quand on veut une performance prévisible.
Que faut-il savoir pour le bac sur ce chapitre ?
Il faut savoir expliquer les trois phases, écrire ou compléter une fonction de fusion et la fonction récursive du tri fusion, dérouler l'algorithme sur un petit tableau, justifier la terminaison et la correction, et expliquer qualitativement pourquoi la complexité est meilleure que quadratique. Les théorèmes généraux de calcul de complexité, comme le Master theorem 2, ne sont pas à connaître.
Comment vérifier mon tri fusion avant de le rendre ?
Teste d'abord fusion seule avec des listes de tailles différentes, dont une liste vide. Puis teste tri_fusion sur un tableau vide, un tableau d'un élément, un tableau déjà trié, un tableau trié à l'envers et un tableau avec des doublons. Compare enfin le résultat avec celui de la fonction sorted de Python sur des tableaux aléatoires.
Sources
- Algorithmes diviser pour régner et tri fusion - Ressource Éduscol, Éduscol. Consulté le 7 novembre 2026.
- Diviser pour régner (informatique), Wikipédia. Consulté le 7 novembre 2026.
Les numéros dans le texte renvoient à ces sources. Une source qui ne dit pas ce qu'on lui fait dire ? Signale-le.