diff --git a/TP1/Makefile b/TP1/Makefile
index a3647b0707bfe3d085594054b59af78a79c1b6e2..83914bdb6b67a0fdf6264c3941a99ac49a3508e9 100644
--- a/TP1/Makefile
+++ b/TP1/Makefile
@@ -1,10 +1,10 @@
-main: main.o tris.o
-	gcc -o main main.o tris.o
-main.o : main.c
-	gcc -o main.o -c main.c
+all: main
+	
+main : tris.o main.c
+	gcc -o main -Wall tris.o -g main.c
 
 tris.o : tris.c tris.h
-	gcc -o tris.o -c tris.c
+	gcc -c -Wall -g tris.c
 
 clean :
 	rm *.o
diff --git a/TP1/main b/TP1/main
index 0959b206f91551144dbd06392129555ed1c6dc2c..29b5568cd857252272d0bce598697c9aa600305b 100755
Binary files a/TP1/main and b/TP1/main differ
diff --git a/TP1/main.c b/TP1/main.c
index 1394ce82a6799a1f5a895782014aed1fabc9d99f..bdf6489e4ed8491efb03bf647f07689615fc6d10 100644
--- a/TP1/main.c
+++ b/TP1/main.c
@@ -1,5 +1,14 @@
 #include <stdio.h>
+#include "tris.h"
 
 int main() {
+  long A[5] = {3, 4, 1, 6, -1};
+
+  triFusion(A, 5);
+
+  for(int i = 0; i < 5; ++i) {
+    printf("%i\n", A[i]);
+  }
+
   return 0;
 }
diff --git a/TP1/main.o b/TP1/main.o
deleted file mode 100644
index bec93ecdf5ed2e1f094258621f16b474617ce573..0000000000000000000000000000000000000000
Binary files a/TP1/main.o and /dev/null differ
diff --git a/TP1/tris.c b/TP1/tris.c
index 339c195c2088e1e620282dfa00a93328912e0d6f..f4145b0228c611d78f8c529173dd8898bf23f809 100644
--- a/TP1/tris.c
+++ b/TP1/tris.c
@@ -1,21 +1,79 @@
-triInsertion(A,n){
-    for(int i = 1; i <= n-1; i++){
-        clé = A[i];
+#include <math.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include "tris.h"
+
+/*triInsertion(A,n){
+    for(size_t i = 1; i <= n-1; i++){
+        clef = A[i];
         j = i - 1;
         while(j >= 0 && A[j] > clé){
             A[j+1] = A[j];
-            j --;
+            j--;
         }
-        A[j+1] = clé;
+        A[j+1] = clef;
     }
+}*/
+
+void triFusion(long* A, size_t size) {
+  sousTriFusion(A, 0, size);
+  printf("Tri fusion\n");
 }
 
-#include <math.h>
+void sousTriFusion(long* A, size_t first, size_t size) {
+    if(first<size-1){
+        size_t middle = floor((first+size)/2);
+        sousTriFusion(A, first, middle);
+        sousTriFusion(A, middle, size);
+        fusion(A, first, middle, size);
+    }
+    printf("Sous Tri fusion\n");
+}
+
+void copySousTable(long* mainT, long* underT, size_t id, size_t size) {
+  size_t i = 0;
+  for(; id < size; ++id) {
+    mainT[id] = underT[i];
+  }
+}
 
-sousTriFusion(A,p,r){
-    if(p<r-1){
-        q = floor((p+r)/2);
-        sousTriFusion(A,p,q);
-        sousTriFusion(A,p)
+void fusion(long* A, size_t first, size_t middle, size_t size) {
+    size_t n1 = middle - first; // Nb elem dans A[p , q]  q exclu
+    size_t n2 = size - middle;  // Nb elem dans A[q , r]  r exclu
+
+    size_t indg = 0;
+    size_t indd = 0;
+
+    long* ag = malloc(sizeof(long) * n1);
+    long* ad = malloc(sizeof(long) * n2);
+    printf("Malloc\n");
+
+    copySousTable(A, ag, first, n1);
+    copySousTable(A, ad, middle, n2);
+    printf("CopySousTable\n");
+
+    int i = first;
+
+    while(i < size) {
+      if(indg == n1) {
+        A[i] = ad[indd];
+        indd++;
+      }
+      else if(indd == n2) {
+        A[i] = ag[indg];
+        indg++;
+      }
+      else if(ag[indg] < ad[indd]) {
+        A[i] = ag[indg];
+        indg++;
+      }
+      else {
+        A[i] = ag[indg];
+        indd++;
+      }
+      ++i;
     }
-}
\ No newline at end of file
+
+    free(ag);
+    free(ad);
+}
diff --git a/TP1/tris.h b/TP1/tris.h
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..37cdfac7de13524426b9b4a476a31781551eccf7 100644
--- a/TP1/tris.h
+++ b/TP1/tris.h
@@ -0,0 +1,8 @@
+#ifndef TRIS_H
+#define TRIS_H
+
+void triFusion(long* A, size_t size);
+void sousTriFusion(long* A, size_t first, size_t size);
+void fusion(long* A, size_t first, size_t middle, size_t size);
+
+#endif //TRIS_H
diff --git a/TP1/tris.o b/TP1/tris.o
index 0de1e591ec8ef184dc587670653ca3fafdf63d20..7eb7222252947ff90d20500bc3d5de7b159b52b8 100644
Binary files a/TP1/tris.o and b/TP1/tris.o differ