3.9: Tracing the Code
- Page ID
- 20805
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.