From 87cd14ad985e499207ada5a332b0aeb31f5475e8 Mon Sep 17 00:00:00 2001 From: Ukhanov Ilya <ukhanov@unistra.fr> Date: Fri, 14 Feb 2020 14:38:52 +0100 Subject: [PATCH] Transformed main --- TP2/Makefile | 12 ++++++ TP2/main | Bin 0 -> 24936 bytes TP2/main.c | 47 +++++++++++++++++++++++ TP2/test.sh | 10 +++++ TP2/tris.c | 105 +++++++++++++++++++++++++++++++++++++++++++++++++++ TP2/tris.h | 17 +++++++++ TP2/tris.o | Bin 0 -> 11280 bytes TP2/utils.c | 18 +++++++++ TP2/utils.h | 5 +++ TP2/utils.o | Bin 0 -> 6824 bytes 10 files changed, 214 insertions(+) create mode 100644 TP2/Makefile create mode 100755 TP2/main create mode 100644 TP2/main.c create mode 100644 TP2/test.sh create mode 100644 TP2/tris.c create mode 100644 TP2/tris.h create mode 100644 TP2/tris.o create mode 100644 TP2/utils.c create mode 100644 TP2/utils.h create mode 100644 TP2/utils.o diff --git a/TP2/Makefile b/TP2/Makefile new file mode 100644 index 0000000..4ef68c0 --- /dev/null +++ b/TP2/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/TP2/main b/TP2/main new file mode 100755 index 0000000000000000000000000000000000000000..4bcea08537181edf148e3c95d4cc01c68c08e7ef GIT binary patch literal 24936 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 literal 0 HcmV?d00001 diff --git a/TP2/main.c b/TP2/main.c new file mode 100644 index 0000000..c9c57bb --- /dev/null +++ b/TP2/main.c @@ -0,0 +1,47 @@ +#include <stdio.h> +#include <stdlib.h> +#include "tris.h" +#include "utils.h" + +int main(int argc, char *argv[]) { + if(argc != 4) { + printf("Usage: %s [typeAlgo]Â [taille] [isAfficher]\n", argv[0]); + exit(1); + } + + char typeAlgo = argv[1][0]; + long taille = (long) atoi(argv[2]); + long MAX = 50; + long tab[taille]; + size_t afficher = (size_t) atoi(argv[3]); + + genTab(tab, taille, MAX); + + switch(typeAlgo) { + case 'i': + printf("Tri Insertion: \n"); + triInsertion(tab,taille); + + if(afficher) + affichertab(tab,taille); + break; + + case 'r': + printf("Tri Rapide: \n"); + triRapide(tab, taille); + + if(afficher) + affichertab(tab,taille); + break; + + case 'f': + printf("Tri Fusion: \n"); + triFusion(tab, taille); + + if(afficher) + affichertab(tab,taille); + break; + } + + return 0; +} diff --git a/TP2/test.sh b/TP2/test.sh new file mode 100644 index 0000000..6fbf719 --- /dev/null +++ b/TP2/test.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +algo = "insertion" +taille = 10000 + +for iTest in 'seq 1 100' +do + res = (/usr/bin/time -f "%U\t%M" ./main $algo $taille) + echo -e "$iTest\t$taille\t$res" +done diff --git a/TP2/tris.c b/TP2/tris.c new file mode 100644 index 0000000..d3df80c --- /dev/null +++ b/TP2/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/TP2/tris.h b/TP2/tris.h new file mode 100644 index 0000000..9841ffb --- /dev/null +++ b/TP2/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/TP2/tris.o b/TP2/tris.o new file mode 100644 index 0000000000000000000000000000000000000000..feb455293f158d5d0ad902bbc1189c5183749779 GIT binary patch literal 11280 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 literal 0 HcmV?d00001 diff --git a/TP2/utils.c b/TP2/utils.c new file mode 100644 index 0000000..bd523d7 --- /dev/null +++ b/TP2/utils.c @@ -0,0 +1,18 @@ +#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]); +} + +void genTab(long* T, long taille, long MAX) { + // Generer le tableau + for(long i = 0; i < taille; ++i) { + T[i] = rand() % MAX; + } +} diff --git a/TP2/utils.h b/TP2/utils.h new file mode 100644 index 0000000..0c016ab --- /dev/null +++ b/TP2/utils.h @@ -0,0 +1,5 @@ +#include <stdio.h> +#include <stdlib.h> + +void affichertab(long* T, int s); +void genTab(long* T, long taille, long MAX); diff --git a/TP2/utils.o b/TP2/utils.o new file mode 100644 index 0000000000000000000000000000000000000000..2408e3a0b5ba8709487bf1b2022345b78b83b3d0 GIT binary patch literal 6824 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 literal 0 HcmV?d00001 -- GitLab