Binary Search

Suppose we want to find an element in a list. The simplest approach would be linear search, where we iterate throughly the list and check each element until we either find a match or reach the end of the list.

If the element we are looking for happens to be the \(k\)th element in the list, then our best case scenario means we will need to execute \(k\) operations. If the element isn't in the list, then for a list of \(n\) elements, our worst case scenario means we will have executed \(n\) operations, meaning \(O(n)\), or linear time is required.

Binary search offers an improvement to a time complexity of \(O(\log n)\), or logarithmic time.

The concept is as follows. Suppose we have an array containing \(n\) elements. We sort the array and then initially check the element at the \(n/2\) position. If the element is the one we're looking for, then we're done. Since we're working with a sorted array, we compare the element we just checked with our target element. If the target element is less than the element at the \(n/2\) index, we can immediately filter out the second half of the array and thereby reduce our search space by \(1/2\). We continually check the element at the mid-point of each reduced search space until we find our element or run out of elements to check.