diff --git a/examples/tri_selection/tri.c b/examples/tri_selection/tri.c
new file mode 100644
index 0000000000000000000000000000000000000000..5bbc7f32a088c42b4a6c8e3880fe0269c5465ff0
--- /dev/null
+++ b/examples/tri_selection/tri.c
@@ -0,0 +1,26 @@
+#include <stdio.h>
+#include <stdlib.h>
+
+#define SIZE 10
+
+void find_min(double tab[], int i0, int *ind) {
+    double min = tab[i0];
+    *ind       = i0;
+    for (int i = i0 + 1; i < SIZE; ++i) {
+        if (min > tab[i]) {
+            *ind = i;
+            min  = tab[i];
+        }
+    }
+}
+
+int main() {
+    double tab[SIZE];
+    for (int i = 0; i < SIZE; ++i) {
+        tab[i] = rand() / (double)RAND_MAX;
+    }
+
+    for (int i = 0; i < SIZE - 1; ++i) {
+        double
+    }
+}
diff --git a/slides/cours_2.md b/slides/cours_2.md
index 2b50f95edb054c691b1bc8914571c97870a89335..a25d847a69eaf8ac00278156c6529b545d9ef808 100644
--- a/slides/cours_2.md
+++ b/slides/cours_2.md
@@ -374,23 +374,132 @@ void main() {
 
 # Collections: tableaux statiques
 
-* Collection d'objets de même type dont le nombre est connu à la
-  compilation;
-* Stockés contigüement en mémoire, sur la pile;
+* Objets de même type: leur nombre est **connu à la compilation**;
+* Stockés contigüement en mémoire (très efficace);
 
     ```C
+    #define SIZE 10
     int entiers[] = {2, 1, 4, 5, 7}; // taille 5, initialisé
     int tab[3]; // taille 3, non initialisé
+    float many_floats[SIZE]; // taille 10, non initialisé
     ```
-* Les indices sont numérotés de `0` à `taille-1`.
+* Les indices sont numérotés de `0` à `taille-1`;
 
     ```C
-    int premier = entier[0];
-    int dernier = entier[4];
+    int premier = entier[0]; // premier = 2
+    int dernier = entier[4]; // dernier = 7
     ```
-* Les tableaux sont **non-initialisés** par défaut.
+* Les tableaux sont **non-initialisés** par défaut;
+* Les bornes ne sont **jamais** vérifiées.
 
     ```C
-    int indetermine = tab[1];
+    int indetermine_1 = tab[1];     // undefined behavior
+    int indetermine_2 = entiers[5]; // UB
     ```
 
+# Remarques
+
+* Depuis  `C99` possibilité d'avoir des tableaux dont la taille est *inconnue à
+  la compilation*;
+
+    ```C
+    int size;
+    scanf("%d", &size);
+    char string[size];
+    ```
+
+ . . .
+
+* Considéré comme une mauvaise pratique: que se passe-t-il si `size == 1e9`?
+* On préfère utiliser l'allocation **dynamique** de mémoire pour ce genre de
+  cas-là (spoiler du futur du cours).
+
+# Initialisation
+
+* Les variables ne sont **jamais** initialisées en `C` par défaut.
+* Question: Que contient le tableau suivant?
+
+    ```C
+    double tab[4];
+    ```
+
+. . .
+
+* Réponse: On en sait absolument rien!
+* Comment initialiser un tableau?
+
+. . .
+
+    ```C
+    #define SIZE 10
+    double tab[SIZE];
+    for (int i = 0; i < SIZE; ++i) {
+        tab[i] = rand() / (double)RAND_MAX * 10.0 - 5.0; // double [-5;5]
+    }
+    ```
+
+# Recherche du minimum dans un tableau (1/2)
+
+## Problématique
+
+Trouver le minimum d'un tableau et l'indice de l'élément le plus petit.
+
+## Écrire un pseudo-code résolvant ce problème (groupe de 3), 2min
+
+. . .
+
+```C
+index = 0
+min   = tab[0]
+for i in [1; SIZE] {
+    if min > tab[i] {
+        min = tab[i]
+        index = i
+    }
+}
+```
+
+# Recherche du minimum dans un tableau (2/2)
+
+## Implémenter ce bout de code en C (groupe de 3), 4min
+
+. . .
+
+```C
+int index = 0;
+float min = tab[0];
+for (int i = 1; i < SIZE; ++i) {
+    if min > tab[i] {
+        min = tab[i];
+        index = i;
+    }
+}
+```
+
+# Tri par sélection (1/2)
+
+## Problématique
+
+Trier un tableau par ordre croissant.
+
+## Idée d'algorithme
+
+```C
+ind = 0
+boucle (ind < SIZE) {
+    Trouver le minimum du tableau, tab_min[ind:SIZE].
+    Échanger tab_min avec tab[ind]
+    ind += 1
+}
+```
+
+# Tri par sélection (2/2)
+
+## Implémentation par groupe de 3
+
+
+
+
+# La fin 
+
+## Des questions?