⌨ Spécialité NSI · Numérique et sciences informatiques Première Générale · Chapitre 8

Tris et complexité

Parcours séquentiel d'un tableau et coût linéaire, tri par sélection et tri par insertion, invariant de boucle et terminaison, coût quadratique, comparaison expérimentale des durées.

1. Parcours séquentiel

Propriété · Coût linéaire

Rechercher une valeur, calculer une somme, un maximum ou une moyenne nécessite de parcourir tout le tableau : pour $n$ éléments, environ $n$ opérations. On dit que le coût (la complexité) est linéaire, en $O(n)$.

2. Tri par sélection

Méthode · Principe

Pour chaque position $i$, on cherche le plus petit élément de la partie non triée (indices $i$ à $n - 1$) et on l'échange avec l'élément d'indice $i$.

def tri_selection(t):
    n = len(t)
    for i in range(n - 1):
        imin = i
        for j in range(i + 1, n):
            if t[j] < t[imin]:
                imin = j
        t[i], t[imin] = t[imin], t[i]

3. Tri par insertion

52917départ25917étape 125917étape 212597étape 312579étape 4
Tri par insertion : à chaque étape, l'élément suivant est inséré à sa place dans la partie déjà triée (en vert).

Méthode · Principe

def tri_insertion(t):
    for i in range(1, len(t)):
        x = t[i]
        j = i
        while j > 0 and t[j - 1] > x:
            t[j] = t[j - 1]
            j = j - 1
        t[j] = x

4. Correction et coût

Définition · Invariant et terminaison

Un invariant de boucle est une propriété vraie avant et après chaque tour : pour les deux tris, « après le tour $i$, les éléments d'indices $0$ à $i$ sont triés ». Il prouve la correction. La terminaison est assurée par un variant : une quantité entière positive qui décroît strictement (par exemple $j$ dans la boucle while).

Propriété · Coût quadratique

Dans le pire cas, ces tris effectuent environ $\dfrac{n^2}{2}$ comparaisons : coût quadratique, en $O(n^2)$. Doubler la taille du tableau multiplie la durée par environ $4$. Le tri par insertion est rapide sur un tableau presque trié. La fonction sorted de Python est bien plus efficace (en $O(n \log n)$).

Activité · Mesurer les durées

MatérielPython, module time.
ConsigneMesurer la durée du tri par insertion pour des tableaux aléatoires de $1\,000$, $2\,000$ et $4\,000$ éléments.
RésultatPar exemple $0{,}04$ s, $0{,}16$ s, $0{,}65$ s : la durée est environ multipliée par $4$ quand $n$ double.
BilanOn retrouve expérimentalement le coût quadratique.

S'entraîner

Exercices corrigés

🎓 20 exercices corrigés et un quiz vous attendent dans ce chapitre.

Créez votre compte gratuit pour voir les corrections, faire les quiz et suivre votre progression.

1

Coût d'une recherche

★☆☆

Combien de comparaisons au maximum pour chercher une valeur dans un tableau non trié de $1\,000$ éléments ?

🔒 Correction réservée aux membres Créer un compte gratuit →
2

Dérouler le tri par sélection

★★☆

Donner l'état de [4, 1, 3, 2] après chaque tour du tri par sélection.

🔒 Correction réservée aux membres Créer un compte gratuit →
3

Dérouler le tri par insertion

★★☆

Donner l'état de [4, 1, 3, 2] après chaque tour du tri par insertion.

🔒 Correction réservée aux membres Créer un compte gratuit →
4

Figure du cours

★☆☆

Dans la figure du tri par insertion, quel élément est inséré à l'étape 3 ? à quelle place ?

🔒 Correction réservée aux membres Créer un compte gratuit →
5

Nombre de comparaisons

★★☆

Combien de comparaisons fait le tri par sélection sur $5$ éléments ?

🔒 Correction réservée aux membres Créer un compte gratuit →
6

Formule générale

★★★

Montrer que le tri par sélection fait $\dfrac{n(n - 1)}{2}$ comparaisons.

🔒 Correction réservée aux membres Créer un compte gratuit →
7

Doubler la taille

★★☆

Un tri quadratique trie $10\,000$ éléments en $2$ s. Durée estimée pour $20\,000$ ? $100\,000$ ?

🔒 Correction réservée aux membres Créer un compte gratuit →
8

Meilleur cas

★★☆

Combien de décalages fait le tri par insertion sur un tableau déjà trié ?

🔒 Correction réservée aux membres Créer un compte gratuit →
9

Pire cas

★★☆

Quel tableau de taille $4$ est le pire cas du tri par insertion ?

🔒 Correction réservée aux membres Créer un compte gratuit →
11

Terminaison

★★☆

Pourquoi la boucle while du tri par insertion se termine-t-elle ?

🔒 Correction réservée aux membres Créer un compte gratuit →
12

Ordre décroissant

★★☆

Que changer dans le tri par sélection pour trier en ordre décroissant ?

🔒 Correction réservée aux membres Créer un compte gratuit →
13

Tri en place

★★☆

Les fonctions du cours renvoient-elles un nouveau tableau ?

🔒 Correction réservée aux membres Créer un compte gratuit →
16

Comparer avec sorted

★★☆

Pourquoi utiliser sorted en pratique ?

🔒 Correction réservée aux membres Créer un compte gratuit →
17

Mesurer

★★☆

Comment mesurer la durée d'exécution d'un tri en Python ?

🔒 Correction réservée aux membres Créer un compte gratuit →
18

Moyenne et coût

★☆☆

Quel est le coût du calcul de la moyenne d'un tableau de $n$ nombres ?

🔒 Correction réservée aux membres Créer un compte gratuit →
19

Tri de chaînes

★★☆

Que donne le tri de ["poire", "Abricot", "banane"] ? Pourquoi ?

🔒 Correction réservée aux membres Créer un compte gratuit →
20

Vrai ou faux

★★☆

a) Le tri par sélection est quadratique. b) Doubler $n$ double la durée d'un tri quadratique. c) Un invariant permet de prouver la correction.

🔒 Correction réservée aux membres Créer un compte gratuit →

Vérifier

Avez-vous bien compris ?

Répondez au quiz : la correction s'affiche immédiatement.