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