:: Enseignements :: ESIPE :: E3INFO :: 2016-2017 :: Algorithmique ::
![[LOGO]](http://igm.univ-mlv.fr/ens/resources/mlv.png) | Tas et tri par tas |
On implémente les opérations nécessaires pour manipuler un tas et
on les utilise pour créer un algorithme de tri.
Exercice 1 - Création, destruction
Pour représenter un tas, on utilise la structure suivante:
typedef struct {
int *tree;
int size;
int capacity;
} heap;
-
Mettre la définition de type dans un fichier heap.h.
-
Ajouter à heap.h le prototype d'une fonction
int create_heap(heap *h, int max)
qui initialise un tas vide avec une capacité maximale
pour stocker max entiers.
La fonction renvoie 1 si la création s'est bien
passée et 0 sinon.
Créer un fichier heap.c et y ajouter
la définition de la fonction.
Quelle doit-être la valeur du champs size ?
-
Écrire une fonction void free_heap(heap *h) qui
libère toute mémoire associée au tas *h.
Attention ! Après un appel à cette fonction, le tas
ne peut plus être utilisé.
Exercice 2 - Vérification
Écrire une fonction int is_heap(heap *h) qui vérifie que *h représente un tas.
Exercice 3 - Insertion
Écrire une fonction int insert_heap(heap *h, int val) qui insère une valeur au tas, tout en respectant
sa structure. La fonction renvoie 1 si l'insertion est correcte et 0 sinon.
Exercice 4 - Extraction de l'élément minimal
Écrire une fonction int extract_min(heap *h, int *val) qui extrait la valeur minimum d'un tas et la
fait passer par adresse dans *val,
tout en conservant une structure de tas pour *h.
La fonction renvoie 1 si l'extraction s'est bien passée et 0 sinon.
Exercice 5 - Tri par tas
En utilisant ces fonctions écrire la fonction
void heap_sort(int tab[], int taille)
qui effectue un tri en ordre décroissant du tableau
tab.
Dans un premier temps, vous pouvez allouer un tas supplémentaire dans la fonction.
Dans un deuxième temps, vous effectuez le tri
sur place dans le tableau tab,
sans utiliser de mémoire supplémentaire.
-
Combien d'éléments pouvez-vous trier en 10 secondes ? Comparer avec le tri par insertion
et le tri rapide.
© Université de Marne-la-Vallée