#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);
}