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