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
 | ||
|  | } |