diff --git a/TP8-sort/others/insert_sort.c b/TP8-sort/others/insert_sort.c
new file mode 100644
index 0000000000000000000000000000000000000000..381b1c3f740623661c363fcdf7573227477032d8
--- /dev/null
+++ b/TP8-sort/others/insert_sort.c
@@ -0,0 +1,118 @@
+#include "sort.h"
+#include <stdio.h>
+
+bool isSorted(int size, int tab[size], bool (*comp)(int, int)) {
+
+  for (int i = 1; i < size; i++) {
+    if (comp(tab[i - 1], tab[i])) {
+      printf("not sorted\n");
+      return false;
+    }
+  }
+  printf("sorted !\n");
+  return true;
+}
+
+void random_tab(int size, int tab[size], int min, int max) {
+  assert(max > min);
+  for (int i = 0; i < size; i++) {
+    tab[i] = min + rand() % (max - min);
+  }
+}
+
+bool isGreater(int a, int b) { return a > b; }
+
+bool isSmaller(int a, int b) { return a < b; }
+
+void swap(int *a, int *b) {
+  int tmp = *a;
+  *a = *b;
+  *b = tmp;
+}
+
+void print_array(int *arr, int size) {
+  for (int i = 0; i < size; i++) {
+    printf("%d ", arr[i]);
+  }
+  printf("\n");
+}
+
+// renvoie la nouvelle pos de la val
+int pos(int size, int tab[size], int val) {
+  int pos = 0;
+  while (val > tab[pos] && pos < size) {
+    pos++;
+  }
+  return pos;
+}
+
+// décale
+void shift(int size, int tab[size], int pos) {
+  for (int i = size - 1; i > pos; i--) {
+    tab[i] = tab[i - 1];
+  }
+}
+
+void sort(int *sorted, const int *const orig, int nitems, bool (*comp)(int, int)) {
+
+  // copy
+  for (int i = 0; i < nitems; i++) {
+    sorted[i] = orig[i];
+  }
+
+
+  for (int i = 1; i <= nitems; i++) {
+      
+    // trouver bonne pos
+    int pos=0;
+    int tmp=sorted[i];
+    print_array(sorted, nitems);
+    while((sorted[pos]>sorted[i] ) && pos <= i){ //tant que tab[pos]<tab[i]
+        pos++;
+    }
+    printf("pos = %d, tmp= %d \n",pos,tmp);
+
+    // int tmp = sorted[i];
+    // // décaler de pos à i
+    // shift(i, sorted, p);
+    // sorted[p] = tmp;
+    // printf("i =%d]; ",i);
+    // print_array(sorted, nitems);
+      
+  }
+}
+
+
+
+
+
+
+// void sort(int *sorted, const int *const orig, int nitems,
+//           bool (*comp)(int, int)) {
+
+//   for (int i = 1; i < nitems; i++) {
+//     int p = pos(i, sorted, sorted[i]);
+//     step(i, sorted, p);
+//   }
+// }
+
+// void sort(int *sorted, const int *const orig, int nitems,
+//           bool (*comp)(int, int)) {
+
+//   // copy
+//   for (int i = 0; i < nitems; i++) {
+//     sorted[i] = orig[i];
+//   }
+
+//  for (int i=1 ; i < nitems; i++) {
+//     int j = i;
+
+//     while (j > 0 && sorted[j-1] > sorted[j]) {
+//       int tmp = sorted[j];
+//       sorted[j] = sorted[j-1];
+//       sorted[j-1] = tmp;
+
+//       j--;
+//     }
+//   }
+// }
\ No newline at end of file
diff --git a/TP8-sort/others/select_sort.c b/TP8-sort/others/select_sort.c
new file mode 100644
index 0000000000000000000000000000000000000000..7c1683329e85670d9b17f9a50a9cd203174fd591
--- /dev/null
+++ b/TP8-sort/others/select_sort.c
@@ -0,0 +1,76 @@
+#include "sort.h"
+#include <stdio.h>
+
+bool isSorted(int nitems, int sorted[nitems], bool (*comp)(int, int)){
+
+  for( int i = 1; i<nitems;i++){
+      if(comp(sorted[i-1],sorted[i])){
+        printf("not sorted\n");
+        return false;
+      }
+  }
+  printf("sorted !\n");
+  return true;
+}
+
+
+void random_tab(int nitems,int sorted[nitems],int min,int max) {
+   assert(max > min);
+   for (int i=0;i<nitems;i++) {
+      sorted[i] = min+rand()%(max-min);
+   }
+}
+
+bool isGreater(int a, int b) { return a > b; }
+
+bool isSmaller(int a, int b) { return a < b; }
+
+void swap(int *a, int *b) {
+  int tmp = *a;
+  *a = *b;
+  *b = tmp;
+}
+
+void print_array(int *arr, int nitems) {
+  for (int i = 0; i < nitems; i++) {
+    printf("%d ", arr[i]);
+  }
+  printf("\n");
+}
+
+
+void sort(int *sorted, const int *const orig, int nitems, bool (*comp)(int, int)) {
+
+  // copy
+  for (int i = 0; i < nitems; i++) {
+    sorted[i] = orig[i];
+  }
+
+    
+   // recherche dans le sortedleau de l'indice de la plus petite valeur
+   int ind_min = 0; 
+   for (int k=1;k<nitems;k++) {
+      if (sorted[k] < sorted[ind_min]) {
+         ind_min = k;
+      }
+   }
+
+   // échange de la 1ère valeur avec la plus petite du sortedleau
+   int tmp = sorted[0];
+   sorted[0] = sorted[ind_min];
+   sorted[ind_min] = tmp;
+  
+   // tri par sélection
+   for (int i=0;i<nitems-1;i++) {
+      ind_min = i; 
+      for (int k=i+1;k<nitems;k++) {
+         if (sorted[k] < sorted[ind_min]) {
+            ind_min = k;
+         }
+      } 
+      tmp = sorted[i];
+      sorted[i] = sorted[ind_min];
+      sorted[ind_min] = tmp;
+   }
+
+}