Exemple #1
0
        public static int FindIndex(Listy listy, int x)
        {
            int left  = 0;
            int right = 1;

            while (listy.ElementAt(right) != -1)
            {
                right = right * 2;
            }
            return(FindIndex(listy, left, right, x));
        }
Exemple #2
0
        public static int FindIndex(Listy listy, int left, int right, int x)
        {
            if (left > right)
            {
                return(-1);
            }
            int mid = (left + right) / 2;

            if (listy.ElementAt(mid) == x)
            {
                return(mid);
            }
            if (listy.ElementAt(mid) == -1 || listy.ElementAt(mid) > x)
            {
                return(FindIndex(listy, left, mid - 1, x));
            }
            return(FindIndex(listy, mid + 1, right, x));
        }
Exemple #3
0
 public static int FindIndexIterative(Listy listy, int left, int right, int x)
 {
     while (left <= right)
     {
         int mid = (left + right) / 2;
         if (listy.ElementAt(mid) == x)
         {
             return(mid);
         }
         if (listy.ElementAt(mid) == -1 || listy.ElementAt(mid) > x)
         {
             right = mid - 1;
         }
         else
         {
             left = mid + 1;
         }
     }
     return(-1);
 }