From d75dbab5bf0894456726db69b0b872c91f89c5d6 Mon Sep 17 00:00:00 2001 From: "paul.albuquer" <paul.albuquerque@hesge.ch> Date: Sat, 13 Nov 2021 17:09:19 +0100 Subject: [PATCH] little adjustments to quicksort --- source_codes/sorting/quicksort.c | 28 ++++++++++++++++++--------- source_codes/sorting/quicksort_part.c | 11 +++-------- 2 files changed, 22 insertions(+), 17 deletions(-) diff --git a/source_codes/sorting/quicksort.c b/source_codes/sorting/quicksort.c index 95943c5..f02bd6e 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 d7e0868..41b4413 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); -- GitLab