diff --git a/Algos_1/main.c b/Algos_1/main.c index c53b2293a0e0db148af8e6ee2c8de3e209d8cd62..b4d743eec34ddaa5fca979b4949f2eb7fb52e502 100644 --- a/Algos_1/main.c +++ b/Algos_1/main.c @@ -1,4 +1,7 @@ -#include "algos.h" +#include "triInsertion.h" +#include "triFusion.h" +#include "triRapide.h" + int readToTab(long* tab, char* file){ int n = 0; @@ -55,7 +58,7 @@ int main(int argc, char **argv){ } else if(strcmp(argv[1], "--fusion")== 0 || strcmp(argv[1], "-f")== 0){ triFusion(tab, n); - printf("Fusion : "); + printf("Fusion : "); for(int i = 0; i<n; i++){ printf("%ld,", tab[i]); } diff --git a/Algos_1/makefile b/Algos_1/makefile index 09e964d3506be09330036bbbeebdd2c8de9f57c3..6a8fd56396c42df8c68c6c65c546ed2837cda787 100644 --- a/Algos_1/makefile +++ b/Algos_1/makefile @@ -1,10 +1,16 @@ all: tri -tri: main.c algos.o - gcc -Wall main.c algos.o -Wall -o tri +tri: main.c triInsertion.o triFusion.o triRapide.o + gcc -Wall main.c triInsertion.o triFusion.o triRapide.o -Wall -o tri -algos: algos.c algos.h - gcc -c algos.c algos.h -Wall +insertion: triInsertion.c triInsertion.h + gcc -c triInsertion.c triInsertion.h -Wall + +fusion: triFusion.c triFusion.h + gcc -c triFusion.c triFusion.h -Wall + +rapide: triRapide.c triRapide.h + gcc -c triRapide.c triRapide.h -Wall clear: rm *.o \ No newline at end of file diff --git a/Algos_1/tri b/Algos_1/tri index 06ac4737766b668fbae91ed02026a9ff1e287e3a..b1c3b93122fbcac33f253945a94a3c5ed4910bf4 100755 Binary files a/Algos_1/tri and b/Algos_1/tri differ diff --git a/Algos_1/triFusion.c b/Algos_1/triFusion.c new file mode 100644 index 0000000000000000000000000000000000000000..adf7a76be6e49da23e956af9b6054bc58fc73f3d --- /dev/null +++ b/Algos_1/triFusion.c @@ -0,0 +1,58 @@ +#include "triFusion.h" + +void sousTriFusion(long * A, size_t p, size_t r){ + 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); + } +} + +void fusion(long * A, size_t p, size_t q, size_t r){ + 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; + while (i < r){ + 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] = Ad[indd]; + indd++; + } + i++; + } +} + +void triFusion(long * A, size_t n){ + sousTriFusion(A, 0, n); +} \ No newline at end of file diff --git a/Algos_1/triFusion.h b/Algos_1/triFusion.h new file mode 100644 index 0000000000000000000000000000000000000000..1819fb9ba7712e2e213ace245d6910fc9e744c0c --- /dev/null +++ b/Algos_1/triFusion.h @@ -0,0 +1,13 @@ +#include <stddef.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <sys/types.h> +#include <sys/stat.h> +#include <unistd.h> +#include <fcntl.h> +#include <string.h> + +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 diff --git a/Algos_1/triFusion.o b/Algos_1/triFusion.o new file mode 100644 index 0000000000000000000000000000000000000000..d2778748c6c8f8f547f38c666347bff1372fadec Binary files /dev/null and b/Algos_1/triFusion.o differ diff --git a/Algos_1/triInsertion.c b/Algos_1/triInsertion.c new file mode 100644 index 0000000000000000000000000000000000000000..e3dbfe0a5683fb84163aa95dd13c94e26948accb --- /dev/null +++ b/Algos_1/triInsertion.c @@ -0,0 +1,15 @@ +#include "triInsertion.h" + +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 != max && A[j] > cle ){ + A[j+1] = A[j]; + j = j-1; + } + A[j+1] = cle; + } +} diff --git a/Algos_1/triInsertion.h b/Algos_1/triInsertion.h new file mode 100644 index 0000000000000000000000000000000000000000..099ddb61356568f4efd6cd53cfea7c9d69ee8223 --- /dev/null +++ b/Algos_1/triInsertion.h @@ -0,0 +1,11 @@ +#include <stddef.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <sys/types.h> +#include <sys/stat.h> +#include <unistd.h> +#include <fcntl.h> +#include <string.h> + +void triInsertion(long* A, size_t n); \ No newline at end of file diff --git a/Algos_1/triInsertion.o b/Algos_1/triInsertion.o new file mode 100644 index 0000000000000000000000000000000000000000..1b156751a9a90658525041818d230a8223c9b9da Binary files /dev/null and b/Algos_1/triInsertion.o differ diff --git a/Algos_1/triRapide.c b/Algos_1/triRapide.c new file mode 100644 index 0000000000000000000000000000000000000000..042a1ffab1bf8ff49b7400623ce6698134f88fe0 --- /dev/null +++ b/Algos_1/triRapide.c @@ -0,0 +1,35 @@ +#include "triRapide.h" + +void sousTriRapide(long* A, size_t p, size_t r) { + size_t max = 0; max--; + if(r-1 != max){ + if (p<(r-1)) { + size_t q = partition(A, p, r); + sousTriRapide(A, p, q); + sousTriRapide(A, q+1, r); + } + } + +} + +size_t partition(long* A, size_t p, size_t r) { + long pivot = A[r-1]; + + size_t i = p; + for (size_t j = p; j <= r-2; j++) { + if (A[j] <= pivot) { + long temp = A[i]; + A[i] = A[j]; + A[j] = temp; + i++; + } + } + long temp = A[i]; + A[i] = A[r-1]; + A[r-1] = temp; + return i; +} + +void triRapide(long* A, size_t n) { + sousTriRapide(A, 0, n); +} \ No newline at end of file diff --git a/Algos_1/triRapide.h b/Algos_1/triRapide.h new file mode 100644 index 0000000000000000000000000000000000000000..2a026374e00bc5b08aecc57c92f720d353aea207 --- /dev/null +++ b/Algos_1/triRapide.h @@ -0,0 +1,13 @@ +#include <stddef.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <sys/types.h> +#include <sys/stat.h> +#include <unistd.h> +#include <fcntl.h> +#include <string.h> + +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); diff --git a/Algos_1/triRapide.o b/Algos_1/triRapide.o new file mode 100644 index 0000000000000000000000000000000000000000..09f591cbee4555c870f5755ae5daa210d48b3394 Binary files /dev/null and b/Algos_1/triRapide.o differ