From cfab610e94734e76e05b3e1720ba4063b04e4b44 Mon Sep 17 00:00:00 2001 From: Lucas Schmidt <lucas.schmidt@etu.unistra.fr> Date: Fri, 31 Jan 2020 14:41:50 +0100 Subject: [PATCH] Ajout du tri rapide --- triRapide.c | 57 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 triRapide.c diff --git a/triRapide.c b/triRapide.c new file mode 100644 index 0000000..0acbf43 --- /dev/null +++ b/triRapide.c @@ -0,0 +1,57 @@ +#include <stdio.h> +#include <stdlib.h> + +void permuter(long* a,long* b){ + long tmp = *a; + *a = *b; + *b = tmp; +} + +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-1;j++){ + if(A[j] <= pivot){ + permuter(A+i,A+j); + i++; + } + } + permuter(A+i,A+r-1); + return i; +} + +void sousTriRapide(long* A,size_t p,size_t r){ + if(p+1 < r){ + size_t q = partition(A,p,r); + sousTriRapide(A,p,q); + sousTriRapide(A,q+1,r); + } +} + +void triRapide(long* A,size_t n){ + sousTriRapide(A,0,n); +} + +void printTab(long* A,size_t n){ + printf("{"); + for(size_t i = 0;i < n;i++){ + if(i != 0){ + printf(","); + } + printf("%ld",A[i]); + } + printf("}\n"); +} + +int main(int argc,char** argv){ + long* A = malloc((argc-1)*sizeof(long)); + for(size_t i = 0;i < argc-1;i++){ + A[i] = atol(argv[i+1]); + } + printf("Tableau d'entrée: "); + printTab(A,argc-1); + triRapide(A,argc-1); + printf("Tableau de sortie: "); + printTab(A,argc-1); + free(A); +} -- GitLab