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