# 3.9: Tracing the Code


To see how binary search works, it’s helpful to add the following print statement at the beginning of the loop:

System.out.println(low + ", " + high);


If we invoke binarySearch like this:

Card card = new Card(11, 0);
System.out.println(binarySearch(cards, card));


We expect to find this card at position 10. Here is the result:

0, 51
0, 24
0, 11
6, 11
9, 11
10


If we search for a card that’s not in the array, like new Card(15, 1), which is the “15 of Diamonds”, we get the following:

0, 51
26, 51
26, 37
26, 30
26, 27
-1


Each time through the loop, we cut the distance between low and high in half. After k iterations, the number of remaining cards is $$52 / 2^k$$. To find the number of iterations it takes to complete, we set $$52/ 2^k = 1$$ and solve for $$k$$. The result is $$\log_{2}{52}$$, which is about $$5.7$$. So we might have to look at 5 or 6 cards, as opposed to all 52 if we did a sequential search.

More generally, if the array contains $$n$$ elements, binary search requires $$\log_{2}{n}$$ comparisons, and sequential search requires $$n$$. For large values of $$n$$, binary search can be much faster.

3.9: Tracing the Code is shared under a CC BY-NC-SA 3.0 license and was authored, remixed, and/or curated by Allen B. Downey (Green Tea Press) .