public void Sort(T[] array)
        {
            Guard.IsNotNull(array, nameof(array));

            if (array.Length == 0 || array.Length == 1)
            {
                return;
            }

            for (int i = 0; i < array.Length - 1; i++)
            {
                // track the min value of the RHS of the array
                var minIndex = i;
                var min      = array[i];

                for (int k = i + 1; k < array.Length; k++)
                {
                    if (array[k].CompareTo(min) < 0)
                    {
                        minIndex = k;
                        min      = array[k];
                    }
                }

                if (minIndex != i)
                {
                    Swapper <T> .Swap(array, i, minIndex);
                }
            }
        }
        public void Sort(T[] array)
        {
            Guard.IsNotNull(array, nameof(array));

            if (array.Length == 0 || array.Length == 1)
            {
                return;
            }

            // From the LHS of the array, swap the values if they are smaller
            for (int i = 1; i < array.Length; i++)
            {
                for (int k = i; k > 0; k--)
                {
                    if (array[k].CompareTo(array[k - 1]) < 0)
                    {
                        Swapper <T> .Swap(array, k, k - 1);
                    }
                }
            }
        }