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)); }
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)); }
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); }