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