示例#1
0
 private bool IsCanStart()
 {
     if (end < start)
     {
         result = -1;
         return(false);
     }
     if (itsSortedObj.CompareTo(start) < 0)
     {
         result = -1;
         return(false);
     }
     if (itsSortedObj.CompareTo(start) == 0)
     {
         result = start;
         return(false);
     }
     if (itsSortedObj.CompareTo(end) > 0)
     {
         result = -1;
         return(false);
     }
     if (itsSortedObj.CompareTo(end) == 0)
     {
         result = end;
         return(false);
     }
     return(true);
 }
示例#2
0
        public int Find(object findValue, object sortedObj)
        {
            itsSortedObj.SetSortedObj(sortedObj);
            itsSortedObj.SetFindValue(findValue);

            start      = itsSortedObj.GetStart();
            end        = itsSortedObj.GetEnd();
            operations = 0;

            if (!IsCanStart())
            {
                return(result);
            }

            while (start < end)
            {
                ++operations;
                int middle = (start + end) / 2;
                if (itsSortedObj.CompareTo(middle) < 0)
                {
                    end = middle - 1;
                }
                else if (itsSortedObj.CompareTo(middle) > 0)
                {
                    start = middle + 1;
                }
                else
                {
                    return(middle);
                }
            }
            return(-1);
        }