diff --git a/source_codes/sorting/quicksort.c b/source_codes/sorting/quicksort.c index 95943c50c149c2b9d43aa907b3f3ba186a3d7b97..f02bd6eac04d132a179ea539e06ae2c1e9f7813f 100644 --- a/source_codes/sorting/quicksort.c +++ b/source_codes/sorting/quicksort.c @@ -4,12 +4,16 @@ #include <assert.h> void print(int size,int tab[size]) { - for (int i=0;i<size;i++) printf("%d ",tab[i]); + for (int i=0;i<size;i++) { + printf("%d ",tab[i]); + } } void random_tab(int size,int tab[size],int inf,int sup) { assert(sup > inf); - for (int i=0;i<size;i++) tab[i] = inf+rand()%(sup-inf); + for (int i=0;i<size;i++) { + tab[i] = inf+rand()%(sup-inf); + } } void swap(int* p_a,int* p_b) { @@ -21,16 +25,17 @@ void swap(int* p_a,int* p_b) { int partition(int size,int array[size],int first,int last) { int pivot = array[last]; int i = first-1,j = last; - while (true) { + do { do { i++; } while (array[i] < pivot && i<j); do { j--; } while(array[j] > pivot && i<j); - if (i >= j) break; - swap(&array[i],&array[j]); - } + if (j>i) { + swap(&array[i],&array[j]); + } + } while (j > i); swap(&array[i],&array[last]); return i; } @@ -38,17 +43,22 @@ int partition(int size,int array[size],int first,int last) { void quicksort(int size,int array[size],int first,int last) { if (first < last) { int midpoint = partition(size,array,first,last); - if (first < midpoint-1) quicksort(size,array,first,midpoint-1); - if (midpoint+1 < last) quicksort(size,array,midpoint+1,last); + if (first < midpoint-1) { + quicksort(size,array,first,midpoint-1); + } + if (midpoint+1 < last) { + quicksort(size,array,midpoint+1,last); + } } } void test_ordre(int size,int array[size]) { - for (int i=0;i<size-1;i++) + for (int i=0;i<size-1;i++) { if (array[i] > array[i+1]) { printf("erreur"); return; } + } printf("ok"); } diff --git a/source_codes/sorting/quicksort_part.c b/source_codes/sorting/quicksort_part.c index d7e0868f77a1ed059e01ad1099938e1c89693fee..41b4413066536a121e4ac3558611ccad216b2a21 100644 --- a/source_codes/sorting/quicksort_part.c +++ b/source_codes/sorting/quicksort_part.c @@ -1,16 +1,15 @@ #include <stdio.h> #include <stdlib.h> #include <stdbool.h> -#include <assert.h> void print(int size,int tab[size]) { for (int i=0;i<size;i++) { printf("%d ",tab[i]); } + printf("\n"); } void random_tab(int size,int tab[size],int inf,int sup) { - assert(sup > inf); for (int i=0;i<size;i++) { tab[i] = inf+rand()%(sup-inf); } @@ -27,14 +26,11 @@ void swap(int* p_a,int* p_b) { int partition(int size,int array[size],int first,int last) { int pivot = array[last]; int i = first-1,j = last; - while (true) { + do { // à compléter pour <i>: do {...} while (...); // à compléter pour <j>: do {...} while (...); - if (i >= j) { - break; - } // à compléter: échanger cases <i> et <j> du tableau <array> - } + } while (j > i); // à compléter: échanger cases <i> et <last> du tableau <array> return i; } @@ -71,7 +67,6 @@ int main(int argc,char** argv) { for (int k=0;k<20;k++) { random_tab(size,res,0,100); print(size,res); - printf("\n"); quicksort(size,res,0,size-1); print(size,res); test_ordre(size,res);