11.6 S e a rching | 551
ing when we pass the place where it should be in the list. For example, if a list contains
the values
and we are looking for judy, we need simply compare judy with becca, bobby, and june to know
that judy is not in the list.
If the search item is greater than the current list component, we move on to the next com-
ponent. If the item is equal to the current component, we have found the desired element.
If the item is less than the current component, then we know that it is not in the list. In
either of the last two cases, we stop looking. In our original algorithm, the loop conditions
stated that the index was within the list and the corresponding list item was not the one
sought. In this algorithm, the second condition must be that the item being sought is less than
the corresponding list item. However, determining whether the item is found is a little more
complex. We must first assert that the index is within the list and, if that is true, assert that
the search item is equal to the corresponding list item.
Why can’t we just test whether itemis equal to listItems[index]after we exit the loop?
This strategy works in all cases but one: if itemis larger than the last element in the list. In
that case, we would exit the loop with indexequal to numItems. Trying to access listItems[in-
dex] would then cause the code to crash with an “index out of range” error. Therefore, we must
check the value of indexfirst.
isThere (in a sorted list)
Set index to 0
whileindex is within the list AND item is greater than listItems[index]
Increment index
return(index is within the list AND item is equal to listItems[index])
becca
bobby
june
phil
robert
tomas