Exemplo n.º 1
0
        public static int?GetIndexBinarySearch <T>(
            IList <T> array, BinarySearchComparison <T> comparison, int?default_value)
            where T : struct
        {
            int min = 0;
            int max = array.Count - 1;

            while (true)
            {
                int middle = (max - min) / 2 + min;
                int result = comparison(array[middle]);

                if (result == 0)
                {
                    return(middle);
                }
                else if (result < 0)
                {
                    min = middle + 1;
                }
                else
                {
                    max = middle - 1;
                }

                if ((max < min) || (min > max) ||
                    (min < 0) || (max >= array.Count))
                {
                    return(default_value);
                }
            }
        }
Exemplo n.º 2
0
 public static int?GetIndexBinarySearch <T>(
     IList <T> array, BinarySearchComparison <T> comparison)
     where T : struct
 {
     return(GetIndexBinarySearch <T>(array, comparison, null));
 }