diff --git a/slides/cours_16.md b/slides/cours_16.md
index b805e9b3b6cc1b332acf849f272a407b1c125999..8e6c615b7377f6ca377f91ba4b37ed12f1e0af84 100644
--- a/slides/cours_16.md
+++ b/slides/cours_16.md
@@ -17,7 +17,7 @@ patat:
 
 # Un joli site
 
-## VIsualisation d'algorithmes
+## Visualisation d'algorithmes
 
 * <https://visualgo.net/>
 * Allons nous rafraîchir la mémoire sur l'insertion / recherche dans un arbre
@@ -1193,7 +1193,7 @@ graph TD;
 * Postez le résultat sur matrix.
 
 
-# L'algorithme du tri par tas (1/3)
+# L'algorithme du tri par tas (1/4)
 
 ## Deux étapes
 
@@ -1221,7 +1221,7 @@ promotion(tab, i)
         promotion(tab, ind_max)
 ```
 
-# L'algorithme du tri par tas (2/3)
+# L'algorithme du tri par tas (2/4)
 
 * Fonctions utilitaires
 
@@ -1240,10 +1240,65 @@ int droite(i)
 ```
 
 
-# L'algorithme du tri par tas (2/2)
+# L'algorithme du tri par tas (3/4)
+
+\footnote size
 
 ## Implémenter en C l'algorithme du tri par tas (matrix, 20min)
 
 . . .
 
+```C 
+void heapsort(int size, int tab[size]) {
+    heapify(size, tab);
+    swap(tab, tab + size - 1);
+    for (int s = size - 1; s > 1; s--) {
+        sift_up(s, tab, 0);
+        swap(tab, tab + s - 1);
+    }
+}
+void heapify(int size, int tab[size]) {
+    for (int i = size / 2 - 1; i >= 0; i--) {
+        sift_up(size, tab, i);
+    }
+}
+void sift_up(int size, int tab[size], int i) {
+    int ind_max = ind_max3(size, tab, i, left(i), right(i));
+    if (i != ind_max) {
+        swap(tab + i, tab + ind_max);
+        sift_up(size, tab, ind_max);
+    }
+}
+```
+
+# L'algorithme du tri par tas (3/4)
+
+\footnotesize
+
+## Fonctions utilitaires
+
+. . .
 
+```C
+int ind_max3(int size, int tab[size], int i, int l, int r) {
+    int ind_max = i;
+    if (l < size && tab[ind_max] < tab[l]) {
+        ind_max = l;
+    }
+    if (r < size && tab[ind_max] < tab[r]) {
+        ind_max = r;
+    }
+    return ind_max;
+}
+void swap(int *a, int *b) {
+    int tmp = *a;
+    *a      = *b;
+    *b      = tmp;
+}
+int left(int i) {
+    return 2 * i + 1;
+}
+int right(int i) {
+    return 2 * i + 2;
+}
+```