forked from menault/TD1_DEV51_Qualite_Algo
tp1
This commit is contained in:
38
quicksort.c
Normal file
38
quicksort.c
Normal file
@@ -0,0 +1,38 @@
|
||||
#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
|
||||
}
|
Reference in New Issue
Block a user