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