diff --git a/Algos_1/a.out b/Algos_1/a.out
index 69ac26e1ad5800fffe9f63ed47736f0d3501dd2e..ce356845c9f1c0a90b7087c5a90462f4120f8863 100755
Binary files a/Algos_1/a.out and b/Algos_1/a.out differ
diff --git a/Algos_1/algos.c b/Algos_1/algos.c
index 51713cfb513e9ee3c91c2846d1db88fae126bcf2..b5ea19f010487b2665558513ae508c27399be957 100644
--- a/Algos_1/algos.c
+++ b/Algos_1/algos.c
@@ -3,10 +3,12 @@
 
 void triInsertion(long* A, size_t n){
     long cle = 0;
+    size_t max = 0;
+    max--;
     for(size_t i = 1; i<n; i++){
         cle=A[i];
         size_t j = i - 1;
-        while (j >= 0 && A[j] > cle){
+        while (j != max && A[j] > cle ){
             A[j+1] = A[j];
             j = j-1;
         }
@@ -16,8 +18,8 @@ void triInsertion(long* A, size_t n){
 
 
 void sousTriFusion(long * A, size_t p, size_t r){
-    if(p<r-1){
-        size_t q = (size_t)(p+r/2);
+    if(p<(r-1)){
+        size_t q = (size_t)((p+r)/2);
         sousTriFusion(A, p, q);
         sousTriFusion(A, q, r);
         fusion(A, p, q, r);
@@ -25,10 +27,25 @@ void sousTriFusion(long * A, size_t p, size_t r){
 }
 
 void fusion(long * A, size_t p, size_t q, size_t r){
-    long* Ad;
-    long* Ag;
     size_t n1 = q-p;
     size_t n2 = r-q;
+
+    long Ad[n2];
+    memset(Ad, 0, n2);
+    int j =0;
+    for(size_t i = q; i<r; i++){
+        Ad[j] = A[i];
+        j++;
+    }
+
+    long Ag[n1];
+    memset(Ag, 0, n1);
+    j =0;
+    for(size_t i = p; i<q; i++){
+        Ag[j] = A[i];
+        j++;
+    }
+
     size_t indg = 0;
     size_t indd = 0;
     size_t i = p;
@@ -37,7 +54,7 @@ void fusion(long * A, size_t p, size_t q, size_t r){
             A[i] = Ad[indd];
             indd++;
         }
-        else if(Ad[indd] == n2){
+        else if(indd == n2){
             A[i] == Ag[indg];
             indg++;
         }
@@ -47,7 +64,7 @@ void fusion(long * A, size_t p, size_t q, size_t r){
         }
         else{
             A[i] = Ad[indd];
-            indg++;
+            indd++;
         }
         i++;
     }
@@ -58,15 +75,22 @@ void triFusion(long * A, size_t n){
 }
 
 void sousTriRapide(long* A, size_t p, size_t r) {
-    if (p<r-1) {
+    if (p<(r-1)) {
         size_t q = partition(A, p, r);
         sousTriRapide(A, p, q);
         sousTriRapide(A, q+1, r);
     }
 }
 
-void partition(long* A, size_t p, size_t r) {
-    size_t pivot = A[r-1];
+size_t partition(long* A, size_t p, size_t r) {
+    printf("r >>>>>>>>>> %d\n", r);
+    size_t max = 0;
+    max--;
+    size_t pivot = 0;
+    if(r-1 != max){
+        pivot = A[r-1];
+    } 
+    
     size_t i = p;
     long temp;
     for (size_t j = p; j < r-2; j++) {
diff --git a/Algos_1/algos.h b/Algos_1/algos.h
index 4ea67b136bc1c7712be2f2a4450e90b075ef3c3e..ec7b0afacb4a1926db812faaa0b41e03c894522d 100644
--- a/Algos_1/algos.h
+++ b/Algos_1/algos.h
@@ -11,4 +11,7 @@
 void triInsertion(long* A, size_t n);
 void sousTriFusion(long * A, size_t p, size_t r);
 void fusion(long * A, size_t p, size_t q, size_t r);
-void triFusion(long * A, size_t n);
\ No newline at end of file
+void triFusion(long * A, size_t n);
+void triRapide(long* A, size_t n);
+size_t partition(long* A, size_t p, size_t r);
+void sousTriRapide(long* A, size_t p, size_t r);
\ No newline at end of file
diff --git a/Algos_1/algos.o b/Algos_1/algos.o
index bb617f334137bd27fc78dd604ea034953514c58a..fcca01db38feaff275db7d0b477cb2e77af7d5ac 100644
Binary files a/Algos_1/algos.o and b/Algos_1/algos.o differ
diff --git a/Algos_1/main.c b/Algos_1/main.c
index bd63d11133a5f3eebcf08e8ea51c49e3ec2b5099..b60a072b2fe67091855531968b4fc9a3f33bbf9c 100644
--- a/Algos_1/main.c
+++ b/Algos_1/main.c
@@ -1,15 +1,34 @@
 #include "algos.h"
 
-void readToTab(long* tab, char* file){
+int readToTab(long* tab, char* file){
+    int n = 0;
     int fd = open(file, O_RDONLY);
-    int i =0;
-    long tmp[2];
-    int nb = read(fd, tmp, sizeof(long)*2);
-    while(nb == 2){
-        tab[i] = tmp[0];
-        nb = read(fd,tmp,sizeof(long)*2);
-        i++;
-}
+    if(fd == -1){
+        perror("open");
+        exit(1);
+    }
+    char tmp[1000];
+    memset(tmp, 0, 1000);
+    char temp;
+    size_t j = 0, x=0;
+    read(fd,&temp,sizeof(char));
+
+    while(temp != '.'){
+        if(temp != ' '){
+            tmp[x] = temp;
+            x++;
+            n++;
+        }
+        else if(temp == ' '){
+            long t = atol(tmp);
+            tab[j] = t;
+            memset(tmp, 0, 1000);
+            j++;
+            x=0;
+        }
+        read(fd,&temp,sizeof(char));
+    }
+    return n-1;
 }
 int main(int argc, char **argv){
     if(argc!=3){
@@ -17,24 +36,40 @@ int main(int argc, char **argv){
         exit(1);
     }
 
-    long* tab = malloc(sizeof(long)*100);
-    readToTab(tab, argv[2]);
-    for(int i  = 0; i<100; i++){
-        printf("%ld - ", tab[i]);
+    long tab[100];
+    int n = readToTab(tab, argv[2]);
+    printf("Base      : ");
+    for(int i  = 0; i<n; i++){
+        printf("%ld,", tab[i]);
     }
+    printf("\n");
 
     if((strcmp(argv[1], "--insertion") == 0)){
-        
+        triInsertion(tab, n);
+        printf("Insertion : ");
+        for(int i  = 0; i<n; i++){
+            printf("%ld,", tab[i]);
+        }
+        printf("\n");
     }
     else if((strcmp(argv[1], "--fusion")== 0)){
-        
+        triFusion(tab, n);
+        printf("Fusion : ");
+        for(int i  = 0; i<n; i++){
+            printf("%ld,", tab[i]);
+        }
+        printf("\n");
     }
     else if((strcmp(argv[1], "--rapide")== 0)){
-        
+        triRapide(tab, n);
+        printf("Rapide : ");
+        for(int i  = 0; i<n; i++){
+            printf("%ld,", tab[i]);
+        }
+        printf("\n");
     }
     else{
         printf("Usage: ./tri <option> <input.txt>\n");
     }
-    free(tab);
     return 0;
 }
\ No newline at end of file
diff --git a/Algos_1/test.txt b/Algos_1/test.txt
index a968cd1a2d480b6f8fc2fc490f7ffa9502100bac..b3e0f2ef70ab7d25a19b810545fb0ef5127fcffd 100644
--- a/Algos_1/test.txt
+++ b/Algos_1/test.txt
@@ -1 +1 @@
-3 4 5 6 1 2 9
\ No newline at end of file
+3 4 5 6 1 2 9 11 .
\ No newline at end of file