Adloun

algorithmique (école d'ingénieur) · Chapitre 14 · Exercice de TD

Tri par sélection

Les tris · niveau 1 (application)

Énoncé

Le tri par sélection cherche le minimum de et l'échange avec , pour . Donner son invariant, le programmer, et compter ses comparaisons dans le pire et dans le meilleur cas. Est-il stable ?

Corrigé

Invariant : « est trié et ». Il est vrai pour . Le minimum de , placé en case , est supérieur ou égal à et inférieur ou égal au reste : on obtient l'invariant pour . Pour , la dernière case est le maximum : le tableau est trié.


nom : T
cases : 8
vert : 0..2
colorier : 6
fleches : 6->3
fleches-bas : 3->6
pointeurs : k=3 m=6
zone : 0..2 trié
zone : 3..7 à trier
legende : m : indice du minimum de T[k:n], échangé avec T[k]

static void triSelection(int[] T) { int n = T.length;
    // I(k) : T[0:k] est trié et T[0:k] <= T[k:n]
    for (int k = 0; k < n - 1; k++) {
        int m = k;                        // indice du minimum de T[k:n]
        for (int i = k + 1; i < n; i++) if (T[i] < T[m]) m = i;
        echanger(T, k, m);                // I(k+1)
    }
}

La recherche du minimum de fait comparaisons, quel que soit le contenu du tableau : au total comparaisons, dans le pire et dans le meilleur cas. Le programme en compte pour , sur un tableau quelconque comme sur un tableau trié : toujours, mais au plus échanges. Il n'est pas stable (corrigé de l'exercice 14.11).

100 % gratuit

La suite du chapitre est sur Adloun

Exercice suivant et tuteur

Sans compte : le cours et le premier QCM. Exercices et tuteur : inscription gratuite en 30 secondes, sans carte bancaire.

Le cours du chapitre · Tous les exercices du chapitre

Exercice suivant et tuteur →