ioCode
Tri par tas
Tas • Exercices 2A
On choisit d'implémenter un tri croissant par un tri par tas, en utilisant un tas max implémenté par un type array OCaml.
- Écrire une fonction1IndiceUtiliser une variable temporaire pour conserver la valeur d'un élément avant de faire l'échange.
echanger : 'a array -> int -> int -> unitqui échange en place les éléments des indices i et j du tableau t. Par exemplelet a = [|1;2;3|] in echanger a 0 2; arenvoie()et modifie le tableau en[|3; 2; 1|]. - Écrire une fonction2IndiceIdentifier le plus grand élément parmi le nœud et ses enfants puis échanger récursivement si nécessaire.
tamiser : 'a array -> int -> int -> unitqui tamise en place le sous-arbre d'indice i pour respecter la propriété d'un tas maximum. Par exemplelet a = [|1;3;2|] in tamiser a 3 0; arenvoie()et modifie le tableau en[|3; 1; 2|]. - Écrire une fonction3IndiceParcourir les nœuds internes de bas en haut afin d'appliquer systématiquement l'opération de tamisage.
construire_tas_max : 'a array -> unitqui transforme en place un tableau arbitraire en un tas maximum valide. Par exemplelet a = [|1;3;2;4;5;6|] in construire_tas_max a; arenvoie()et modifie donne[|6; 5; 4; 1; 3; 2|]. - Écrire une fonction4IndiceExtraire le maximum et le placer à la fin du tableau, puis réajuster la structure et répéter l'opération avec le début de la structure.
trier_par_tas : 'a array -> unitqui trie un tableau en ordre croissant en utilisant les fonctions précédentes et le tri par tas. Par exemplelet a = [|3;1;4;2|] in trier_par_tas a; arenvoie()et modifie le tableau en[|1; 2; 3; 4|].
Langage
Console initialisée. En attente de l'interpréteur...