Binary Search
A 
binary search can be used on 
an array that has been sorted into ascending or descending order. 
Binary Search
The algorithm for a binary search is as follows:
	- ★ Compare the searched for value to the middle array item
		- ☆ if value == middle then quit. You've found it.
- ☆ else if value < middle then consider the sublist making up the first half of the array (before the middle item)
- ☆ else if value > middle then consider the sublist making up the last half of the array (after the middle item)
- ★ If you didn't find the value, repeat the search on the sublist. 
- ★ You are done as soon as you find the item or whenever the sublist that you are supposed to search is empty.
	
int BinarySearch(int a[], int aSize, int toFind)
{
    int start = 0;                         //the search starts with index 0
    int last = aSize -1;                   //last is the last array index
 
    while (start <= last)                  //while there is still a place to look.      
    {
         int middle = (start + last) / 2;  //Look here first
         if (toFind == a[middle])          //Found item. Quit. 
               return middle;
         if (toFind > a[middle])           //Look in the last half
               start = middle + 1;
         else                              //OR look in the first half
               last =  middle - 1;
    }
    //the element wasn't found
    return -1;
}
        
binarySearch.cpp
 
Example
We have a list of integer values:	
int list[12] = {-2,1,2,3,5,7,8,10,14,15,38,61};
(1) 
Suppose we wish to search this one-dimensional array for the value 10:
int index = BinarySearch(list,12,10); 
The figure below, shows how binary search works:.	
	
	|  |  |  |  |  | 1st |  |  |  |  |  |  | 
	
	|  |  |  |  |  | ↓ |  |  |  |  |  |  | 
	
		| -2 | 1 | 2 | 3 | 5 | 7 | 8 | 10 | 14 | 15 | 38 | 61 | 
	
	| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 
	
	| start |  |  |  |  | middle |  |  |  |  |  | last | 
	
	|  |  |  |  |  | 1st |  |  | 2nd |  |  |  | 
	
	|  |  |  |  |  | ↓ |  |  | ↓ |  |  |  | 
	
		| -2 | 1 | 2 | 3 | 5 | 7 | 8 | 10 | 14 | 15 | 38 | 61 | 
	
	| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 
	
	|  |  |  |  |  |  | start |  | middle |  |  | last | 
	
	|  |  |  |  |  | 1st | 3rd |  | 2nd |  |  |  | 
	
	|  |  |  |  |  | ↓ | ↓ |  | ↓ |  |  |  | 
	
		| -2 | 1 | 2 | 3 | 5 | 7 | 8 | 10 | 14 | 15 | 38 | 61 | 
	
	| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 
	
	|  |  |  |  |  |  | start/middle | last |  |  |  |  | 
	
	|  |  |  |  |  | 1st | 3rd | 4th stop here
 | 2nd |  |  |  | 
	
	|  |  |  |  |  | ↓ | ↓ | ↓ | ↓ |  |  |  | 
	
		| -2 | 1 | 2 | 3 | 5 | 7 | 8 | 10 | 14 | 15 | 38 | 61 | 
	
	| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 
	
	|  |  |  |  |  |  |  | start/middle/last |  |  |  |  | 
After control returns to the activating function, index will contain 7.
(2)
Suppose we wish to search this one-dimensional array for the value 25:
int index = BinarySearch(list,12,25); 
The figure below, shows how binary search works:.	
	
	|  |  |  |  |  | 1st |  |  |  |  |  |  | 
	
	|  |  |  |  |  | ↓ |  |  |  |  |  |  | 
	
		| -2 | 1 | 2 | 3 | 5 | 7 | 8 | 10 | 14 | 15 | 38 | 61 | 
	
	| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 
	
	| start |  |  |  |  | middle |  |  |  |  |  | last | 
	
	|  |  |  |  |  | 1st |  |  | 2nd |  |  |  | 
	
	|  |  |  |  |  | ↓ |  |  | ↓ |  |  |  | 
	
		| -2 | 1 | 2 | 3 | 5 | 7 | 8 | 10 | 14 | 15 | 38 | 61 | 
	
	| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 
	
	|  |  |  |  |  |  | start |  | middle |  |  | last | 
	
	|  |  |  |  |  | 1st |  |  | 2nd |  | 3rd |  | 
	
	|  |  |  |  |  | ↓ |  |  | ↓ |  | ↓ |  | 
	
		| -2 | 1 | 2 | 3 | 5 | 7 | 8 | 10 | 14 | 15 | 38 | 61 | 
	
	| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 
	
	|  |  |  |  |  |  |  |  |  | start | middle | last | 
	
	|  |  |  |  |  | 1st |  |  | 2nd | 4th stop here
 | 3rd |  | 
	
	|  |  |  |  |  | ↓ |  |  | ↓ | ↓ | ↓ |  | 
	
		| -2 | 1 | 2 | 3 | 5 | 7 | 8 | 10 | 14 | 15 | 38 | 61 | 
	
	| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 
	
	|  |  |  |  |  |  |  |  |  | start/middle/last |  |  | 
After control returns to the activating function, index will contain -1 meaning that the function did not find 25 in the array.
Application Examples
	- ★ IRS database keyed by social security number
- ★ DMV records keyed by driver's license numbers
Binary or Linear search
Why use a binary search when a linear search is easier to code? The answer lies in the efficiency of the search. With a linear search, if you double the size of a list, you could potentially take twice as much time to find an item. With a binary search, doubling the size of the list merely adds one more item to look at. Each time you look with a binary search, you eliminate half of the remaining list items as possible matches.