From f4c8addcce92f2f4132c5a2f458214f6d40e147b Mon Sep 17 00:00:00 2001 From: litiere <malric.litiere@etu.unistra.fr> Date: Fri, 5 Feb 2021 14:45:53 +0100 Subject: [PATCH] TP1 --- TP1/Makefile | 12 ++++++ TP1/main | Bin 0 -> 24712 bytes TP1/main.c | 28 +++++++++++++ TP1/tridec.c | 108 +++++++++++++++++++++++++++++++++++++++++++++++++++ TP1/tridec.h | 17 ++++++++ TP1/tris.c | 105 +++++++++++++++++++++++++++++++++++++++++++++++++ TP1/tris.h | 17 ++++++++ TP1/tris.o | Bin 0 -> 11272 bytes TP1/utils.c | 19 +++++++++ TP1/utils.h | 5 +++ TP1/utils.o | Bin 0 -> 6920 bytes 11 files changed, 311 insertions(+) create mode 100644 TP1/Makefile create mode 100644 TP1/main create mode 100644 TP1/main.c create mode 100644 TP1/tridec.c create mode 100644 TP1/tridec.h create mode 100644 TP1/tris.c create mode 100644 TP1/tris.h create mode 100644 TP1/tris.o create mode 100644 TP1/utils.c create mode 100644 TP1/utils.h create mode 100644 TP1/utils.o diff --git a/TP1/Makefile b/TP1/Makefile new file mode 100644 index 0000000..4ef68c0 --- /dev/null +++ b/TP1/Makefile @@ -0,0 +1,12 @@ +all: main + +main : tris.o utils.o main.c + gcc -o main -Wall utils.o tris.o -g main.c + +tris.o : tris.c tris.h + gcc -c -Wall -g tris.c + +utils.o : utils.c utils.h + gcc -o utils.o -c -g utils.c +clean : + rm *.o diff --git a/TP1/main b/TP1/main new file mode 100644 index 0000000000000000000000000000000000000000..e1c2a656341bd0b46333d87f12c91f9830e88306 GIT binary patch literal 24712 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 b19rw_T(v8>bnlj5e>YtiQP!ChOep&=BDz0n literal 0 HcmV?d00001 diff --git a/TP1/main.c b/TP1/main.c new file mode 100644 index 0000000..f434235 --- /dev/null +++ b/TP1/main.c @@ -0,0 +1,28 @@ +#include <stdio.h> +#include <stdlib.h> +#include "tris.h" +#include "utils.h" + + +int main() { + printf("Tri Insertion: \n"); + long* triIns = malloc(sizeof(long) * 100); + listeAlea(100,300); + affichertab(triIns,100); + triInsertion(triIns,100); + affichertab(triIns,100); + + printf("Tri Rapide: \n"); + long* triRap = listeAlea(100,300); + affichertab(triRap,100); + triRapide(triRap, 100); + affichertab(triRap,100); + + printf("Tri Fusion: \n"); + long* triFus = listeAlea(100,300); + affichertab(triFus,100); + triFusion(triFus, 100); + affichertab(triFus,100); + + return 0; +} diff --git a/TP1/tridec.c b/TP1/tridec.c new file mode 100644 index 0000000..96fab4e --- /dev/null +++ b/TP1/tridec.c @@ -0,0 +1,108 @@ +#include <math.h> +#include <stdlib.h> +#include <stdio.h> +#include "tris.h" + +void triInsertionDec(long* A, size_t n) { + for(size_t i = 1; i <= n-1; i++){ + long cle = A[i]; + size_t j = i - 1; + size_t ecriture=0; + while(j+1 >= j && A[j] > cle){ + ecriture++; + A[j+1] = A[j]; + j = j-1; + } + ecriture++; + A[j+1] = cle; + } +} + +void triFusionDec(long* A, size_t size) { + sousTriFusionDec(A, 0, size); +} + +void sousTriFusionDec(long* A, size_t first, size_t size) { + if(first+1 <size){ // p < r - 1 + size_t middle = floor((first+size)/2); + sousTriFusionDec(A, first, middle); + sousTriFusionDec(A, middle, size); + fusionDec(A, first, middle, size); + } +} + +void copySousTableDec(long* mainT, long* underT, size_t id, size_t size) { + for(size_t i = id; i < id+size; ++i) { + underT[i-id] = mainT[i]; + } +} + +void fusionDec(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); + + copySousTableDec(A, ag, first, n1); + copySousTableDec(A, ad, middle, n2); + + 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] = ad[indd]; + indd++; + } + ++i; + } + + free(ag); + free(ad); +} + +void triRapideDec(long* A, size_t n) { + sousTriRapideDec(A,0,n); +} + +void sousTriRapideDec(long* A, size_t first, size_t size){ + if(first+1 < size){ + size_t middle = partitionDec(A,first,size); + sousTriRapideDec(A,first,middle); + sousTriRapideDec(A,middle+1,size); + } +} + +size_t partitionDec(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){ + permuterDec(A,i,j); + i++; + } + } + permuterDec(A,i,size-1); + return i; +} + +void permuterDec(long* A,size_t i,size_t j) { + long inter = A[i]; + A[i] = A[j]; + A[j] = inter; +} diff --git a/TP1/tridec.h b/TP1/tridec.h new file mode 100644 index 0000000..6b4dbf8 --- /dev/null +++ b/TP1/tridec.h @@ -0,0 +1,17 @@ +#ifndef TRIS_H +#define TRIS_H +#include <stdint.h> +#include <stdlib.h> + +void triInsertionDec(long* A, size_t n); + +void triFusionDec(long* A, size_t size); +void sousTriFusionDec(long* A, size_t first, size_t size); +void fusionDec(long* A, size_t first, size_t middle, size_t size); + +void triRapideDec(long* A, size_t n); +void sousTriRapideDec(long* A, size_t first, size_t size); +size_t partitionDec(long* A, size_t first, size_t size); +void permuterDec(long* A,size_t i,size_t j); + +#endif //TRIS_H \ No newline at end of file diff --git a/TP1/tris.c b/TP1/tris.c new file mode 100644 index 0000000..d3df80c --- /dev/null +++ b/TP1/tris.c @@ -0,0 +1,105 @@ +#include <math.h> +#include <stdlib.h> +#include <stdio.h> +#include "tris.h" + +void triInsertion(long* A, size_t n) { + for(size_t i = 1; i <= n-1; i++){ + long cle = A[i]; + size_t j = i - 1; + while(j+1 >= j && A[j] > cle){ + A[j+1] = A[j]; + j = j-1; + } + A[j+1] = cle; + } +} + +void triFusion(long* A, size_t size) { + sousTriFusion(A, 0, size); +} + +void sousTriFusion(long* A, size_t first, size_t size) { + 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); + } +} + +void copySousTable(long* mainT, long* underT, size_t id, size_t size) { + for(size_t i = id; i < id+size; ++i) { + underT[i-id] = mainT[i]; + } +} + +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); + + copySousTable(A, ag, first, n1); + copySousTable(A, ad, middle, n2); + + 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] = ad[indd]; + indd++; + } + ++i; + } + + 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 new file mode 100644 index 0000000..9841ffb --- /dev/null +++ b/TP1/tris.h @@ -0,0 +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); + +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 new file mode 100644 index 0000000000000000000000000000000000000000..3efd234b62b12a752cf80fdb172ff874b2259a64 GIT binary patch literal 11272 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 literal 0 HcmV?d00001 diff --git a/TP1/utils.c b/TP1/utils.c new file mode 100644 index 0000000..3715ef2 --- /dev/null +++ b/TP1/utils.c @@ -0,0 +1,19 @@ +#include <stdio.h> +#include <stdlib.h> +#include "utils.h" + +void affichertab(long* T, int s){ + printf("[ "); + for(int i = 0; i < s-1; i++){ + printf("%d , ",T[i]); + } + printf("%d ]\n",T[s-1]); +} + +long* listeAlea(size_t longeur, size_t N){ + long liste[longeur]; + for(size_t i = 0; i < longeur; i++){ + liste[i] = rand() % N; + } + return liste; +} \ No newline at end of file diff --git a/TP1/utils.h b/TP1/utils.h new file mode 100644 index 0000000..d36682b --- /dev/null +++ b/TP1/utils.h @@ -0,0 +1,5 @@ +#include <stdio.h> +#include <stdlib.h> + +void affichertab(long* T, int s); +long* listeAlea(size_t longeur, size_t N); \ No newline at end of file diff --git a/TP1/utils.o b/TP1/utils.o new file mode 100644 index 0000000000000000000000000000000000000000..1efc08401d93d50fd87c0b5a4cc61da2ae97ead8 GIT binary patch literal 6920 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 W+!cv>kjmM&(1Gl1QBw%2{eJ<@o-;-O literal 0 HcmV?d00001 -- GitLab