diff --git a/TP1/main b/TP1/main
index be57b07d0f235c87329d251cf13d8e044e8bcf82..75f172ca0fc8ef762645823292ccba0db606b930 100755
Binary files a/TP1/main and b/TP1/main differ
diff --git a/TP1/main.c b/TP1/main.c
index 8730ecf3c6bedf923cb323d46de86b4b5b772dbe..8b03e2fec88d3284aa059b6a394b596c31f87f1e 100644
--- a/TP1/main.c
+++ b/TP1/main.c
@@ -5,17 +5,23 @@
 
 
 int main() {
-  long T1[5] ={3,2,5,1,4} ;
+  printf("Tri Insertion: \n");
+  long triIns[8] ={3,2,8,4,1,6,7,5};
+  affichertab(triIns,8);
+  triInsertion(triIns,8);
+  affichertab(triIns,8);
 
-  long T2[8] ={3,2,8,4,1,6,7,5} ;
+  printf("Tri Rapide: \n");
+  long triRap[8] ={3,2,8,4,1,6,7,5};
+  affichertab(triRap,8);
+  triRapide(triRap, 8);
+  affichertab(triRap,8);
 
-  affichertab(T1,5);
-  printf("\n");
-
-  //triInsertion(T1,5);
-  triFusion(T1, 5);
-
-  affichertab(T1,5);
+  printf("Tri Fusion: \n");
+  long triFus[8] ={3,2,8,4,1,6,7,5};
+  affichertab(triFus,8);
+  triFusion(triFus, 8);
+  affichertab(triFus,8);
 
   return 0;
 }
diff --git a/TP1/tris.c b/TP1/tris.c
index 5d0eaf878dd581a3d2bf6086005eb5be29d5db02..d3df80cbcad7dabaddc3cb3300a1f62e1b07dd95 100644
--- a/TP1/tris.c
+++ b/TP1/tris.c
@@ -17,23 +17,20 @@ void triInsertion(long* A, size_t n) {
 
 void triFusion(long* A, size_t size) {
   sousTriFusion(A, 0, size);
-  printf("Tri fusion\n");
 }
 
 void sousTriFusion(long* A, size_t first, size_t size) {
-    if(first+1 <size){ // p < r - 1 
+    if(first+1 <size){ // p < r - 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];
+  for(size_t i = id; i < id+size; ++i) {
+    underT[i-id] = mainT[i];
   }
 }
 
@@ -46,11 +43,9 @@ void fusion(long* A, size_t first, size_t middle, size_t size) {
 
     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;
 
@@ -68,7 +63,7 @@ void fusion(long* A, size_t first, size_t middle, size_t size) {
         indg++;
       }
       else {
-        A[i] = ag[indg];
+        A[i] = ad[indd];
         indd++;
       }
       ++i;
@@ -77,3 +72,34 @@ void fusion(long* A, size_t first, size_t middle, size_t size) {
     free(ag);
     free(ad);
 }
+
+void triRapide(long* A, size_t n) {
+    sousTriRapide(A,0,n);
+}
+
+void sousTriRapide(long* A, size_t first, size_t size){
+    if(first+1 < size){
+        size_t middle = partition(A,first,size);
+        sousTriRapide(A,first,middle);
+        sousTriRapide(A,middle+1,size);
+    }
+}
+
+size_t partition(long* A, size_t first, size_t size) {
+    long pivot = A[size-1];
+    size_t i = first;
+    for(int j = first; j+2 <= size; j++){
+        if(A[j] <= pivot){
+            permuter(A,i,j);
+            i++;
+        }
+    }
+    permuter(A,i,size-1);
+    return i;
+}
+
+void permuter(long* A,size_t i,size_t j) {
+    long inter = A[i];
+    A[i] = A[j];
+    A[j] = inter;
+}
diff --git a/TP1/tris.h b/TP1/tris.h
index 5b7b1c2dbeb952cfc194b2369ea0dc4206f980d1..619574b5c18b48d56c2b4edcda927e594c7e8867 100644
--- a/TP1/tris.h
+++ b/TP1/tris.h
@@ -1,12 +1,17 @@
-#ifndef TRIS_H
-#define TRIS_H
-#include <stdint.h>
-#include <stdlib.h>
-
-void triInsertion(long* A, size_t n);
-
-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
+#ifndef TRIS_H
+#define TRIS_H
+#include <stdint.h>
+#include <stdlib.h>
+
+void triInsertion(long* A, size_t n);
+
+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);
+
+void triRapide(long* A, size_t n);
+void sousTriRapide(long* A, size_t first, size_t size);
+size_t partition(long* A, size_t first, size_t size);
+void permuter(long* A,size_t i,size_t j);
+
+#endif //TRIS_H
diff --git a/TP1/tris.o b/TP1/tris.o
index 1afaba8c5e48d9b8a7900cdf5d56066d74f88a94..3ac31f9566182cf23d8866866ef876f00e45e93f 100644
Binary files a/TP1/tris.o and b/TP1/tris.o differ
diff --git a/TP1/utils.c b/TP1/utils.c
index df560764a6b806fd80a4123d6664b2804537493a..be9137a01d4d17a98d52ffb97a0045de94f44ea9 100644
--- a/TP1/utils.c
+++ b/TP1/utils.c
@@ -1,9 +1,11 @@
 #include <stdio.h>
 #include <stdlib.h>
-#include "utils.h" 
+#include "utils.h"
 
 void affichertab(long* T, int s){
-    for(int i = 0; i < s; i++){
-        printf("%d \n",T[i]);
-    } 
-} 
\ No newline at end of file
+    printf("[ ");
+    for(int i = 0; i < s-1; i++){
+        printf("%d , ",T[i]);
+    }
+    printf("%d ]\n",T[s-1]);
+}
diff --git a/TP1/utils.o b/TP1/utils.o
index 95f6e18aa652033c445c466ecc38da865e5aa1f8..25be2a52f64bb733f2762702c2b1b50f92231104 100644
Binary files a/TP1/utils.o and b/TP1/utils.o differ