Cet article a un prédécesseur et un successeur.
La question
Bonsoir, j’ai écrit une classe TypeScript de tri par tas (HeapSort) qui marche presque mais pas tout à fait, peux-tu y jeter un coup d’œil ?
La réponse
Ton code est très proche d’un tri par tas correct, mais il contient quelques erreurs subtiles de logique, notamment :
– un index de base incorrect (0 vs 1),
– une remontée/descente incomplète dans le tas,
– et un mauvais cas limite dans extraire et inserer.
Voyons ça point par point.
Indexation du tableau T
Tu démarres le tableau du tas avec :
→ bonne idée pour que la racine soit à T[1].
Mais du coup, tous tes accès doivent supposer que T[0] est inutilisé.
Or dans ta boucle augmenter, tu fais :
Il faudrait tester i > 1 (sinon this.pere(1) renvoie 0, où il y a undefined).
✅ Corrige :
Extraire
Tu fais :
Mais T.pop() supprime et renvoie le dernier élément, qui peut être undefined si le tas est vide.
Et tu appelles inserer même si le tas est vide ensuite, ce qui est dangereux.
✅ Corrige ainsi :
Inserer ne tasse pas correctement
Ta méthode inserer mélange la logique de remplacement racine et de heapify down,
mais ta condition :
a une erreur : tu testes > au lieu de >= et tu ne mets jamais à jour i après permutation.
✅ Il faut réécrire la descente correctement :
Version corrigée complète
Cet article a un prédécesseur et un successeur.