forked from menault/TD1_DEV51_Qualite_Algo
38 lines
824 B
C
38 lines
824 B
C
#include "quicksort.h"
|
|
|
|
// Fonction utilitaire : échanger deux entiers
|
|
static void swap(int* a, int* b)
|
|
{
|
|
int tmp = *a;
|
|
*a = *b;
|
|
*b = tmp;
|
|
}
|
|
|
|
// Partition : divise le tableau autour du pivot
|
|
static int partition(int* A, int lo, int hi)
|
|
{
|
|
int pivot = A[hi]; // pivot = dernier élément
|
|
int i = lo;
|
|
|
|
for(int j = lo; j < hi; j++)
|
|
{
|
|
if(A[j] <= pivot)
|
|
{
|
|
swap(&A[i], &A[j]);
|
|
i++;
|
|
}
|
|
}
|
|
swap(&A[i], &A[hi]); // placer le pivot à la bonne position
|
|
return i; // index final du pivot
|
|
}
|
|
|
|
// Quicksort récursif
|
|
void quicksort(int* A, int lo, int hi)
|
|
{
|
|
if(lo >= hi || lo < 0) // vérification des bornes
|
|
return;
|
|
|
|
int p = partition(A, lo, hi);
|
|
quicksort(A, lo, p - 1); // tri gauche
|
|
quicksort(A, p + 1, hi); // tri droite
|
|
} |