#include <math.h> #include <stdio.h> #include <stdlib.h> #include "perf.h" int recursion = 0; int comparaison = 0; int permutation = 0; int* tab_perf; void monitor_triRapide(long* A, size_t n, int* tab) { tab_perf = tab; monitor_sousTriRapide(A, 0, n); } void monitor_sousTriRapide(long* A, size_t first, size_t n) { recursion+=1; if(first+1 < n){ comparaison+=1; size_t middle = monitor_partition(A,first,n); monitor_sousTriRapide(A,first,middle); monitor_sousTriRapide(A,middle+1,n); } comparaison+=1; tab_perf[0] =recursion; tab_perf[1] =comparaison; tab_perf[2] =permutation; } size_t monitor_partition(long* A, size_t first, size_t n) { long pivot = A[n-1]; size_t i = first; for(int j = first; j+2 <= n; j++){ if(A[j] <= pivot){ comparaison+=1; monitor_permuter(A,i,j); i++; } comparaison+=1; } monitor_permuter(A,i,n-1); return i; } void monitor_permuter(long* A,size_t i,size_t j) { permutation+=1; long inter = A[i]; A[i] = A[j]; A[j] = inter; }