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