From 9ae7a8d63294a0fc3cef2b5e34551494610296aa Mon Sep 17 00:00:00 2001
From: Dario Genga <dario.genga@etu.hesge.ch>
Date: Mon, 15 Nov 2021 19:33:44 +0100
Subject: [PATCH] Add cyclic permutation

Also edited the print_array method to allow more clarity to the display.
---
 histo.c                | 12 ++++++++++++
 unidimensional_array.c | 18 +++++++++++++++++-
 unidimensional_array.h |  2 ++
 3 files changed, 31 insertions(+), 1 deletion(-)

diff --git a/histo.c b/histo.c
index e801771..0a07188 100644
--- a/histo.c
+++ b/histo.c
@@ -7,6 +7,7 @@
 
 int main() {
     srand(time(NULL));
+    size_t cycle_number = 3;
     // Ask the user the size of the array
     size_t array_size = ask_array_size();
     int *array = malloc(array_size * sizeof(int));
@@ -15,6 +16,17 @@ int main() {
     fill_array_with_random_values(array, array_size);
 
     // Print the array
+    printf("Original array :\n");
+    print_array(array, array_size);
+
+    // Shuffle the array
+    shuffle_array(array, array_size);
+    printf("Array after shuffle :\n");
+    print_array(array, array_size);
+
+    // Perform a cyclic permutation
+    perform_cyclic_permutation(array, array_size, cycle_number);
+    printf("Array after cyclic permutation :\n");
     print_array(array, array_size);
 
     // Find the lowest value in the array
diff --git a/unidimensional_array.c b/unidimensional_array.c
index b803efd..df35b64 100644
--- a/unidimensional_array.c
+++ b/unidimensional_array.c
@@ -34,8 +34,24 @@ void fill_array_with_random_values(int* array, size_t array_size) {
     shuffle_array(array, array_size);
 }
 
+
+void perform_cyclic_permutation(int* array, size_t array_size, size_t cycle_number) {
+    int *array_tmp = malloc(array_size * sizeof(int));
+
+    for (size_t i = 0; i < array_size; i++) {
+        size_t tmp_index = (i + cycle_number) % array_size;
+        array_tmp[tmp_index] = array[i];
+    }
+
+    for (size_t i = 0; i < array_size; i++) {
+        array[i] = array_tmp[i];
+    }
+
+    free(array_tmp);
+}
+
 void print_array(int* array, size_t array_size) {
-    printf("Array :\n[");
+    printf("[");
     for (size_t i = 0; i < array_size; i++)
     {
         printf("%d", array[i]);
diff --git a/unidimensional_array.h b/unidimensional_array.h
index b0c8f25..0dcc53f 100644
--- a/unidimensional_array.h
+++ b/unidimensional_array.h
@@ -17,6 +17,8 @@ int find_index_highest_value_in_array(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);
+
 void print_array(int* array, size_t array_size);
 
 void swap(int *x, int *y);
-- 
GitLab