From bad50992fd4b9cef9738993c23ce826473e835c1 Mon Sep 17 00:00:00 2001 From: vinayak Date: Fri, 16 Oct 2020 18:31:45 +0530 Subject: [PATCH] insertion_sort_recursive (#647) * insertion_sort_recursive * feat: add insertion sort recursive algorithm * Update sorting/insertion_sort_recursive.c Co-authored-by: Krishna Vedala <7001608+kvedala@users.noreply.github.com> * Update sorting/insertion_sort_recursive.c Co-authored-by: Krishna Vedala <7001608+kvedala@users.noreply.github.com> * Update insertion_sort_recursive.c * Update sorting/insertion_sort_recursive.c Co-authored-by: Krishna Vedala <7001608+kvedala@users.noreply.github.com> * Update sorting/insertion_sort_recursive.c Co-authored-by: Krishna Vedala <7001608+kvedala@users.noreply.github.com> * Update sorting/insertion_sort_recursive.c Co-authored-by: Krishna Vedala <7001608+kvedala@users.noreply.github.com> Co-authored-by: Krishna Vedala <7001608+kvedala@users.noreply.github.com> --- sorting/insertion_sort_recursive.c | 71 ++++++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 sorting/insertion_sort_recursive.c diff --git a/sorting/insertion_sort_recursive.c b/sorting/insertion_sort_recursive.c new file mode 100644 index 00000000..ff79ea2b --- /dev/null +++ b/sorting/insertion_sort_recursive.c @@ -0,0 +1,71 @@ +/** + * @file + * @brief [Insertion sort](https://en.wikipedia.org/wiki/Insertion_sort) + * algorithm implementation. + */ +#include +#include +#include +#include + +/** + * @addtogroup sorting Sorting algorithms + * @{ + */ +/** + * Insertion sort algorithm implements using Recursion + * @param arr array to be sorted + * @param size size of array + */ +void RecursionInsertionSort(int *arr, int size) +{ + if(size <= 0) + { + return; + } + + // marking recursive call to reach starting element + RecursionInsertionSort(arr,size-1); + + int key = arr[size-1]; + int j = size-2; + // swapping logic for insertion sort + while(j >= 0 && arr[j] > key) + { + arr[j+1] = arr[j]; + j--; + } + arr[j+1] = key; +} +/** @} */ +/** Test function + * @returns None + */ +static void test() +{ + const int size = rand() % 500; /* random array size */ + int *arr = (int *)calloc(size, sizeof(int)); + + /* generate size random numbers from -50 to 49 */ + for (int i = 0; i < size; i++) + { + arr[i] = (rand() % 100) - 50;/* signed random numbers */ + } + RecursionInsertionSort(arr, size); + for (int i = 0; i < size ; ++i) + { + assert(arr[i] <= arr[i + 1]); + } + free(arr); +} + +/** Main function + * @returns integer 0 + */ +int main(int argc, const char *argv[]) +{ + /* Intializes random number generator */ + srand(time(NULL)); + test(); + return 0; +}