Aller au contenu

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 log⁡2n\log_2 n niveaux, chacun coûtant de l'ordre de nn opérations, donc de l'ordre de nlog⁡2nn\log_2 n, contre n2n^2 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

Les trois phases de diviser pour régnerTrois étapes successives : diviser le problème, résoudre les sous-problèmes, combiner les solutions.1DiviserCouper en sous-problèmes plus petits2RégnerRésoudre chaque sous-problème, souvent par récursivité3CombinerAssembler les solutions partielles
  1. DiviserCouper en sous-problèmes plus petits
  2. RégnerRésoudre chaque sous-problème, souvent par récursivité
  3. CombinerAssembler les solutions partielles
Les trois phases de diviser pour régner · Les trois phases de la méthode.

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.

Quelques algorithmes de type diviser pour régner
AlgorithmeProblème traitéDécoupage
Tri fusionTrier un tableauDeux moitiés du tableau
Rotation d'imageTourner une image d'un quart de tourCarreaux de plus en plus petits, jusqu'au pixel
Points les plus rapprochésTrouver les deux points les plus prochesSous-ensembles de points
Algorithme d'EuclideCalculer un PGCDNombres plus petits à chaque étape
Quelques algorithmes de type diviser pour régner · D'après les exemples cités dans le dossier de sources.

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é.
Le tri fusion en un coup d'œilCarte mentale du tri fusion avec les branches diviser, régner, combiner et coût.Deux moitiésMilieu = n // 2DiviserAppels récursifsCas de base : 0 ou 1RégnerFusion de listesUn seul parcoursStable avec <=Combinerlog n niveauxn par niveaun log n au totalCoûtTri fusion

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 un coup d'œil · Les idées clés du tri fusion.

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 nn, 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 à nn.

Démonstration · Coût du tri fusion pour $n = 2^k$

Notons T(n)T(n) le coût pour un tableau de taille nn, que l'on prend égale à une puissance de 2 pour simplifier : n=2kn=2^k. On modélise la fusion par un coût de nn opérations et le cas de base par un coût nul : T(1)=0T(1)=0.

Pour n≥2n\ge 2, on trie deux moitiés de taille n/2n/2, puis on fusionne :

T(n)=2 T ⁣(n2)+n.T(n)=2\,T\!\left(\frac n2\right)+n.

Divisons par nn et posons uk=T(2k)2ku_k=\dfrac{T(2^k)}{2^k}. On obtient

uk=2 T(2k−1)+2k2k=T(2k−1)2k−1+1=uk−1+1,u0=0.u_k=\frac{2\,T(2^{k-1})+2^k}{2^k}=\frac{T(2^{k-1})}{2^{k-1}}+1=u_{k-1}+1,\qquad u_0=0.

La suite (uk)(u_k) est arithmétique de raison 1 : uk=ku_k=k. Donc

T(n)=n k=nlog⁡2n.T(n)=n\,k=n\log_2 n.

Vérification : T(2)=2T(2)=2, T(4)=2×2+4=8=4×2T(4)=2\times 2+4=8=4\times 2, T(8)=2×8+8=24=8×3T(8)=2\times 8+8=24=8\times 3.

On peut aussi lire ce résultat sur l'arbre des appels. Il y a log⁡2n\log_2 n niveaux de fusions ; à chaque niveau, les fusions portent au total sur les nn éléments, donc coûtent nn au total. Le produit donne nlog⁡2nn\log_2 n.

On dit que la complexité du tri fusion est en O(nlog⁡n)O(n\log n), alors que celle des tris par sélection et par insertion est en O(n2)O(n^2) dans le pire cas.

Variantes, pièges et méthode d'examen

Exercices corrigés

Exercice 1 Fusionner deux listes triées à la main

★☆☆Environ 8 min

On considère les listes triées a=[3,27,38,43]a=[3,27,38,43] et b=[5,9,10,82]b=[5,9,10,82].

  1. Applique l'algorithme de fusion et écris la liste obtenue.
  2. Combien de comparaisons entre un élément de aa et un élément de bb 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
  1. On compare 3 et 5 : 3 passe. Comparaison n°1, résultat [3].

  2. On compare 27 et 5 : 5 passe. Comparaison n°2, résultat [3, 5].

  3. On compare 27 et 9 : 9 passe. Comparaison n°3.

  4. On compare 27 et 10 : 10 passe. Comparaison n°4, résultat [3, 5, 9, 10].

  5. On compare 27 et 82 : 27 passe. Comparaison n°5.

  6. On compare 38 et 82 : 38 passe. Comparaison n°6.

  7. On compare 43 et 82 : 43 passe. Comparaison n°7. La liste aa est épuisée.

  8. On recopie le reste de bb : [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 nn éléments demande n−1n-1 comparaisons.

Exercice 2 Calculer un coût avec la relation de récurrence

★★☆Environ 10 min

On modélise le coût du tri fusion par T(1)=0T(1)=0 et T(n)=2 T(n/2)+nT(n)=2\,T(n/2)+n pour n=2kn=2^k, k≥1k\ge 1.

  1. Calcule T(2)T(2), T(4)T(4), T(8)T(8) puis T(16)T(16).
  2. Vérifie que ces valeurs coïncident avec nlog⁡2nn\log_2 n.
Indice 1

Utilise chaque valeur pour calculer la suivante.

Indice 2

Pour n=16n=16, log⁡216=4\log_2 16=4.

Voir la correction pas à pas
  1. T(2)=2 T(1)+2=0+2=2T(2)=2\,T(1)+2=0+2=2.

  2. T(4)=2 T(2)+4=4+4=8T(4)=2\,T(2)+4=4+4=8.

  3. T(8)=2 T(4)+8=16+8=24T(8)=2\,T(4)+8=16+8=24.

  4. T(16)=2 T(8)+16=48+16=64T(16)=2\,T(8)+16=48+16=64.

  5. Comparaison avec nlog⁡2nn\log_2 n : 2×1=22\times1=2, 4×2=84\times2=8, 8×3=248\times3=24, 16×4=6416\times4=64. Les valeurs coïncident.

Le coût est bien nlog⁡2nn\log_2 n : T(16)=64T(16)=64. Pour un tri quadratique, on aurait de l'ordre de 162=25616^2=256 opérations ; l'écart se creuse vite quand nn grandit.

Exercice 3 Comparer un tri quadratique et le tri fusion

★★★Environ 12 min

Pour trier n=1024n=1024 éléments, on estime le coût d'un tri quadratique à n2n^2 opérations et celui du tri fusion à nlog⁡2nn\log_2 n opérations.

  1. Calcule chacun de ces deux coûts.
  2. Calcule le rapport entre le coût quadratique et le coût du tri fusion.
  3. Explique en une phrase pourquoi ce rapport augmente avec nn.
Indice 1

1024=2101024=2^{10}, donc log⁡21024=10\log_2 1024=10.

Indice 2

Le rapport se simplifie : n2nlog⁡2n=nlog⁡2n\dfrac{n^2}{n\log_2 n}=\dfrac{n}{\log_2 n}.

Voir la correction pas à pas
  1. Coût quadratique : 10242=1 048 5761024^2=1\,048\,576.

  2. Coût du tri fusion : 1024×10=10 2401024\times10=10\,240.

  3. Rapport : 1 048 57610 240=102,4\dfrac{1\,048\,576}{10\,240}=102{,}4.

  4. Explication : le rapport vaut nlog⁡2n\dfrac{n}{\log_2 n} ; 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.

  1. Quelles sont, dans l'ordre, les trois phases de la méthode diviser pour régner ?

  2. Dans la fonction tri_fusion, quel est le cas de base correct ?

  3. Dans le tri fusion, à quel moment les éléments sont-ils réellement mis dans l'ordre ?

  4. La fusion de deux listes triées de tailles totales nn a un coût :

  5. Quelle est la complexité du tri fusion d'un tableau de nn éléments ?

  6. Un tableau de taille 16 est coupé en deux à chaque étape jusqu'à des tableaux d'un élément. Combien de niveaux de découpage y a-t-il ?

  7. Avec la relation T(n)=2T(n/2)+nT(n)=2T(n/2)+n et T(1)=0T(1)=0, que vaut T(8)T(8) ?

  8. Vrai ou faux : si on remplace <= par < dans la comparaison de la fusion, le résultat n'est plus trié.

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 à nn, d'où un coût en n2n^2 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 log⁡2n\log_2 n niveaux. Le coût total est de l'ordre de nlog⁡2nn\log_2 n.

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 nlog⁡nn\log n 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

  1. Algorithmes diviser pour régner et tri fusion - Ressource Éduscol, Éduscol. Consulté le 7 novembre 2026.
  2. 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.

Signaler une erreur sur cette page

Je suis en…

Primaire

  • CP Bientôt
  • CE1 Bientôt
  • CE2 Bientôt
  • CM1 Bientôt
  • CM2 Bientôt

Collège

Lycée

Supérieur

  • BTS Bientôt
  • BUT Bientôt
  • Licence Bientôt
  • Prépas Bientôt

Sur cette page