algorithmique (école d'ingénieur) · Chapitre 14 · Application directe du cours
File de priorité
Les tris · niveau 2
Énoncé
Écrire une classe Tas munie d'un tableau T et d'une taille n (le tas occupe ), et de deux opérations en :
void inserer(int x): on place en case , puis on le fait remonter tant qu'il est plus grand que son père ;int extraireMax(): on retourne , on le remplace par la dernière valeur, puis on la fait descendre.
Insérer dans un tas vide, donner le tableau obtenu, puis l'ordre des extractions.
Corrigé
Le père de la case est la case , ses fils sont les cases et .
class Tas {
int[] T; int n; // le tas occupe T[0:n]
Tas(int capacite) { T = new int[capacite]; n = 0; }
void inserer(int x) {
if (n == T.length) T = Arrays.copyOf(T, 2 * n + 1); // agrandir
T[n] = x; int i = n; n++;
// I(i) : T[0:n] est un tas, sauf peut-être entre i et son père
while (i > 0 && T[(i - 1) / 2] < T[i]) {
echanger(T, i, (i - 1) / 2);
i = (i - 1) / 2;
}
}
int extraireMax() { // tas non vide
int max = T[0];
n--;
T[0] = T[n]; // la dernière valeur va à la racine
int i = 0;
// I(i) : T[0:n] est un tas, sauf peut-être entre i et ses fils
while (2 * i + 1 < n) {
int f = 2 * i + 1;
if (f + 1 < n && T[f + 1] > T[f]) f++; // le plus grand fils
if (T[i] >= T[f]) break;
echanger(T, i, f); i = f;
}
return max;
}
}
14.6 : tas = [20, 12, 12, 5, 9, 3, 7]
14.6 : extractions : 20 12 12 9 7 5 3
nom : T
valeurs : 12 9 3 5 20
colorier : 4
fleches : 4->1 1->0
legende : insertion de 20 en case 4 : il remonte en case 1, puis à la racine
nom : T
valeurs : 20 12 12 5 9 3 7
fleches : 0->1 1->3 2->5
fleches-bas : 0->2 1->4 2->6
legende : le tas obtenu : chaque père i est ≥ ses fils 2i+1 et 2i+2
Une valeur qui remonte ou descend parcourt au plus une branche de l'arbre presque complet, de hauteur : chaque opération est en dans le pire cas. Les extractions successives donnent les valeurs par ordre décroissant : c'est le principe du tri par tas.
100 % gratuit
La suite du chapitre est sur Adloun
- 10 autres exercices corrigés dans ce chapitre
- Les 2 QCM du chapitre, le premier sans compte
- Le tuteur, qui guide pas à pas sans donner la réponse
Sans compte : le cours et le premier QCM. Exercices et tuteur : inscription gratuite en 30 secondes, sans carte bancaire.