/* inssort.c */
/* An implementation of an insertion sort algorithm. */

/* compiler directives */
#include <stdio.h>

/* function prototypes */
void insertion_sort(int array[], int arrayLength);
void display_array(int input_array[], int input_size);

int main()
{
  int nums[5] = {20, 31, 17, 47, 14};

  int nums_length = 5;

  printf("Unsorted Array:\n");
  display_array(nums, nums_length);

  insertion_sort(nums, nums_length);

  printf("Sorted Array:\n");
  display_array(nums, nums_length);
  return 0;
}

/* Insertion sort function. Sorts an array of ints in descending order. */
void insertion_sort(int array[], int array_length)
{
  int j, i, key;

  for (j = 1; j < array_length; j++)
   {
     key = array[j];

     /* Move all values smaller then key up one position. */
     for (i = j - 1; (i >= 0) && (array[i] < key); i--)
     {
       array[i + 1] = array[i];
     }
     array[i + 1] = key;  /* insert key into proper position */
   }
}

/* Function that simply displays each element of input_array. */
void display_array(int input_array[], int input_size)
{
  int i;

  for (i = 0; i < input_size; i++)
   {
    printf("%d ", input_array[i]);
   }
  printf("\n\n");
}
