From 4dc6ea86faadba210e7424e514b6178aed482cbc Mon Sep 17 00:00:00 2001
From: Dario Genga <dario.genga@etu.hesge.ch>
Date: Mon, 15 Nov 2021 19:45:38 +0100
Subject: [PATCH] Add permutation values between small and last

The program can permute the smallest value in the array with the last
one.
---
 histo.c                |  7 ++++---
 unidimensional_array.c | 13 +++++++++++--
 unidimensional_array.h |  4 +++-
 3 files changed, 18 insertions(+), 6 deletions(-)

diff --git a/histo.c b/histo.c
index 0a07188..3530bb8 100644
--- a/histo.c
+++ b/histo.c
@@ -29,9 +29,10 @@ int main() {
     printf("Array after cyclic permutation :\n");
     print_array(array, array_size);
 
-    // Find the lowest value in the array
-    int lowest_value = find_lowest_value_in_array(array, array_size);
-    printf("Lowest value : %d\n", lowest_value);
+    // Permute smallest value with the last value
+    permute_lowest_value_with_last_value(array, array_size);
+    printf("Array after swapping the smallest value with the last one\n");
+    print_array(array, array_size);
     
     // Swap the highest value of the array with the last element of the array
     size_t index_highest_value = find_index_highest_value_in_array(array, array_size);
diff --git a/unidimensional_array.c b/unidimensional_array.c
index df35b64..3572bca 100644
--- a/unidimensional_array.c
+++ b/unidimensional_array.c
@@ -62,17 +62,26 @@ void print_array(int* array, size_t array_size) {
     printf("]\n");
 }
 
-int find_lowest_value_in_array(int* array, size_t array_size) {
+int find_lowest_value_index_in_array(int* array, size_t array_size) {
     int lowest_value;
+    size_t lowest_index;
 
     for (size_t i = 0; i < array_size; i++) {
         if (i == 0) {
             lowest_value = array[i];
+            lowest_index = i;
         } else if (array[i] < lowest_value) {
             lowest_value = array[i];
+            lowest_index = i;
         }
     }
-    return lowest_value;
+    return lowest_index;
+}
+
+void permute_lowest_value_with_last_value(int* array, size_t array_size) {
+    int lowest_index = (int)find_lowest_value_index_in_array(array, array_size);
+    int last_index = array_size - 1;
+    swap(&array[lowest_index], &array[last_index]);
 }
 
 int find_index_highest_value_in_array(int* array, size_t array_size) {
diff --git a/unidimensional_array.h b/unidimensional_array.h
index 0dcc53f..eff8638 100644
--- a/unidimensional_array.h
+++ b/unidimensional_array.h
@@ -11,10 +11,12 @@ size_t ask_array_size();
 
 void fill_array_with_random_values(int* array, size_t array_size);
 
-int find_lowest_value_in_array(int* array, size_t array_size);
+int find_lowest_value_index_in_array(int* array, size_t array_size);
 
 int find_index_highest_value_in_array(int* array, size_t array_size);
 
+void permute_lowest_value_with_last_value(int* array, size_t array_size);
+
 void shuffle_array(int* array, size_t array_size);
 
 void perform_cyclic_permutation(int* array, size_t array_size, size_t cycle_number);
-- 
GitLab