private static int FindMinElementIndex <T>(T[] arr, int startIndex, int endIndex)
        where T : IComparable <T>
    {
        Debug.Assert(0 <= startIndex && startIndex < arr.Length, "Starting index was out of the array boundaries.");
        Debug.Assert(0 <= endIndex && endIndex < arr.Length, "End index was out of the array boundaries.");
        Debug.Assert(startIndex <= endIndex, "Starting index was larger than end index");

        int minElementIndex = startIndex;

        for (int i = startIndex + 1; i <= endIndex; i++)
        {
            if (arr[i].CompareTo(arr[minElementIndex]) < 0)
            {
                minElementIndex = i;
            }
        }

        Debug.Assert(AssertionUtilities.IsMinElementIn(arr[minElementIndex], arr, startIndex, endIndex), "The result of find minimal element index was not the minimal element index");

        return(minElementIndex);
    }