diff --git a/histo.c b/histo.c
index 0a07188ac47e3acfdbc93846520c7f90f7600cf8..3530bb861ccb0cf402251ffbdfe9ba0357c07e04 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 df35b64ca38210a4dc9b6a3c01842ec9b9cc320c..3572bca265d59f621b3146cc32165c524409186d 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 0dcc53fb96b40795d3fc02165db2486926ca2a3a..eff8638797696fbbddbc7a7bf7865d9a1fca461e 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);