"A picture is worth a thousand words"
In order to explain to a friend how Binary search algorithm works, I drew several pictures to show solution of a simple problem using this algorithm. Here I would like to share it in this post.
As shown in the figure below, we are given a sorted array v = [1, 2, 3, 4, 5, 7, 9, 10, 12, 17], and we want to find index of the target number 9. One can see easily that the answer should be 6 (suppose index of the first element is 0).
Binary search algorithm illustration
In Binary search algorithm, we define three pointers to elements: l
, r
and mid
. They point respectively to the lower (left) bound index, the upper (right) bound index and the middle index of the range for searching. We calculate mid
as mid = l + (r-l)/2
.
Initially, we search the entire array. So l
= 0, r
= 9 and mid
= 4. Here is the first step:
The element pointed by mid
is 5 and it is smaller than our target number 9. So we narrow down the searching range to the right half of the array: l
= mid
+1 = 5, r
= 9 and mid
is updated 7:
Now the element pointed by mid
is 10 and it is larger than our target number 9. So we narrow down again the searching range to its left half.
We repeat the same steps until the element pointed by mid
is equal to the target number 9. See, we find out the index of number 9 in this array is 6.
Binary search algorithm code
Below is the c++ code for this algorithm:
/*
* Binary search
*/
int binSearch(vector<int>& array, int target) {
int l = 0, r = array.size()-1;
while (l<=r)
{
int mid = l + (r-l)/2;
if(array[mid] == target)
{
return mid;
}
if(array[mid] > target)
{
r = mid-1;
}
else{
l = mid+1;
}
}
return -1;
}
Overview
I put all the steps of this example in one figure to demonstrate overview of the Binary search algorithm:
A similar problem
Here is a similar problem which can also be solved by varying a little the Binary search algorithm: in a sorted array with repeated elements, we would like to find index of the first occurrence of the target number. One can think of the solution. I will present the solution using figures in my next post.
Top comments (0)