Skip to content
Snippets Groups Projects
perf.c 1.11 KiB
Newer Older
Maxime Bachelet's avatar
Maxime Bachelet committed
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include "perf.h"

int recursion = 0;
int comparaison = 0;
int permutation = 0;
Maxime Bachelet's avatar
Maxime Bachelet committed
long* tab_perf;
Maxime Bachelet's avatar
Maxime Bachelet committed

Maxime Bachelet's avatar
Maxime Bachelet committed
void monitor_triRapide(long* A, size_t n, long* tab) {
Maxime Bachelet's avatar
Maxime Bachelet committed
    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;
}