Let's ease back into programming with this task. (TL;DR Video)
Searching through a long list of items for a particular one, like a name, can take a long time. Imagine how long it takes to look through all the data in the Google search engine for a specific string like "To be or not to be".
A Linear Search goes through the list one-by-one, usually starting at index 0, and stops when it finds the requested item. If the list has a billion items and each of those has a billion sub-items... if the target is the very last one, this would take a long time.
However, if the search list is sorted, we can cut this time down exponentially by doing a Binary Search. (The action of sorting the list adds to the complexity but is certainly worth it, considering the alternative.)
In Binary Search, the sorted list is searched in halves.
Look at the middle item (or as close as possible). Is that the target? If not, is it too low or two high?
If it was too high, take the left half of the remaining items and find its middle... repeat
If it was too low, take the right half of the remaining items and find its middle... repeat
In this way, we cut away half of the list with each iteration.
Go to our Repl.it class for this assignment. (direct link)