int linearSearch(int[] array, int target) { for 0 <= i < array.length { if array[i] == target { return i } else if array[i] > target { // this else clause is only valid if we know that the array is already sorted return -1 } } return -1 } int binarySearch(int[] array, int target) { int first = 0 int last = array.length - 1 int middle while first <= last { middle = (first + last) / 2 if array[middle] == target { return middle } else if target < array[middle] { last = middle - 1 } else { first = middle + 1 } } return -1 } int recursiveBS(int[] array, int target, int first, int last) { if (first > last) { return -1 } int middle = (first + last) / 2 if array[middle] == target { return middle } else if target < array[middle] { return recursiveBS(array, target, first, middle - 1) } else { return recursiveBS(array, target, middle + 1, last) } } _____________ array target first 0 last 9 middle 4 _____________ array target first 0 last 3 middle 1 _____________ array target first 2 last 3 middle 2 _____________