From 5e54fe463708786254090ff22471a01d77e8b5de Mon Sep 17 00:00:00 2001
From: Dario Genga <dario.genga@etu.hesge.ch>
Date: Mon, 15 Nov 2021 19:02:45 +0100
Subject: [PATCH] Add shuffle method to create a random array

Also added a method to display the content of the array.
---
 histo.c                |  5 +++++
 unidimensional_array.c | 34 +++++++++++++++++++++++++++-------
 unidimensional_array.h | 10 +++++++---
 3 files changed, 39 insertions(+), 10 deletions(-)

diff --git a/histo.c b/histo.c
index 0c0e596..e801771 100644
--- a/histo.c
+++ b/histo.c
@@ -3,8 +3,10 @@
  * Description : Manipulate an unidimensional array with dynamic memory allocation
  */
 #include "unidimensional_array.h"
+#include "time.h"
 
 int main() {
+    srand(time(NULL));
     // Ask the user the size of the array
     size_t array_size = ask_array_size();
     int *array = malloc(array_size * sizeof(int));
@@ -12,6 +14,9 @@ int main() {
     // Fill the array with random values
     fill_array_with_random_values(array, array_size);
 
+    // Print the array
+    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);
diff --git a/unidimensional_array.c b/unidimensional_array.c
index 25a288f..b803efd 100644
--- a/unidimensional_array.c
+++ b/unidimensional_array.c
@@ -14,19 +14,39 @@ size_t ask_array_size() {
     return array_size;
 }
 
-void fill_array_with_random_values(int array[], size_t array_size) {
-    size_t max_value = array_size - 1;
+void shuffle_array(int* array, size_t array_size) {
+    for (size_t i = 0; i < array_size; i++)
+    {
+        int index1 = rand() % (int)array_size;
+        int index2 = rand() % (int)array_size;
+        swap(&array[index1], &array[index2]);
+    }
+}
+
+void fill_array_with_random_values(int* array, size_t array_size) {
+    // Fill the array with all values from 0 to its size - 1
+    for (size_t i = 0; i < array_size; i++)
+    {
+        array[i] = i;
+    }
 
-    srand(time(0));
+    // Then shuffle the array
+    shuffle_array(array, array_size);
+}
 
+void print_array(int* array, size_t array_size) {
+    printf("Array :\n[");
     for (size_t i = 0; i < array_size; i++)
     {
-        int random_value = (rand() % (max_value + 1));
-        array[i] = random_value;
+        printf("%d", array[i]);
+        if (i + 1 < array_size) {
+            printf(" , ");
+        }
     }
+    printf("]\n");
 }
 
-int find_lowest_value_in_array(int array[], size_t array_size) {
+int find_lowest_value_in_array(int* array, size_t array_size) {
     int lowest_value;
 
     for (size_t i = 0; i < array_size; i++) {
@@ -39,7 +59,7 @@ int find_lowest_value_in_array(int array[], size_t array_size) {
     return lowest_value;
 }
 
-int find_index_highest_value_in_array(int array[], size_t array_size) {
+int find_index_highest_value_in_array(int* array, size_t array_size) {
     int highest_value;
     size_t index_highest_value = 0;
 
diff --git a/unidimensional_array.h b/unidimensional_array.h
index 17cedaa..b0c8f25 100644
--- a/unidimensional_array.h
+++ b/unidimensional_array.h
@@ -9,11 +9,15 @@
 
 size_t ask_array_size();
 
-void fill_array_with_random_values(int array[], size_t 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_in_array(int* array, size_t array_size);
 
-int find_index_highest_value_in_array(int array[], size_t array_size);
+int find_index_highest_value_in_array(int* array, size_t array_size);
+
+void shuffle_array(int* array, size_t array_size);
+
+void print_array(int* array, size_t array_size);
 
 void swap(int *x, int *y);
 
-- 
GitLab