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