From 1a483060aa0f4b6d4ae19bf6a20a783f324a7966 Mon Sep 17 00:00:00 2001 From: Dario Genga <dario.genga@etu.hesge.ch> Date: Mon, 15 Nov 2021 19:55:16 +0100 Subject: [PATCH] Add sort with insertion The program now perform a descending sort using the insertion algorithm. --- histo.c | 7 ++++++- unidimensional_array.c | 13 +++++++++++++ unidimensional_array.h | 2 ++ 3 files changed, 21 insertions(+), 1 deletion(-) diff --git a/histo.c b/histo.c index 3530bb8..849bbde 100644 --- a/histo.c +++ b/histo.c @@ -31,7 +31,12 @@ int main() { // 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"); + printf("Array after swapping the smallest value with the last one :\n"); + print_array(array, array_size); + + // Descending sort the array by using the insertion algorithm + sort_by_insertion_desc(array, array_size); + printf("Array after insertion desc sort :\n"); print_array(array, array_size); // Swap the highest value of the array with the last element of the array diff --git a/unidimensional_array.c b/unidimensional_array.c index 3572bca..dbf4bf8 100644 --- a/unidimensional_array.c +++ b/unidimensional_array.c @@ -84,6 +84,19 @@ void permute_lowest_value_with_last_value(int* array, size_t array_size) { swap(&array[lowest_index], &array[last_index]); } +void sort_by_insertion_desc(int* array, size_t array_size) { + size_t i = 1; + + while (i < array_size) { + size_t k = i; + while (k > 0 && array[k - 1] < array[k]) { + swap(&array[k], &array[k - 1]); + k -= 1; + } + i++; + } +} + 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 eff8638..0e6bb40 100644 --- a/unidimensional_array.h +++ b/unidimensional_array.h @@ -21,6 +21,8 @@ void shuffle_array(int* array, size_t array_size); void perform_cyclic_permutation(int* array, size_t array_size, size_t cycle_number); +void sort_by_insertion_desc(int* array, size_t array_size); + void print_array(int* array, size_t array_size); void swap(int *x, int *y); -- GitLab