For recursive binary search implementation; search interval is updated depending on the midPoint value.
midPoint = lowerBound+(higherBound-lowerBound)/2
For the starting step; lowerBound is 0 and higherBound is the last array index.
Following sample project created by qt creator and contains following files:
1- SearchIntArrayRecursively.pro
2- main.cpp
SearchIntArrayRecursively.pro file contains project configuration.
TEMPLATE = app CONFIG += console CONFIG -= app_bundle CONFIG -= qt SOURCES += main.cppmain.cpp file contains main method and recursive binarySearch function implementations.
#include <stdio.h>
int getIndexOfItemRecursively(int pSearchedItem, int* pArray, int mLowerBound, int mHigherBound)
{
if( mLowerBound > mHigherBound )
return -1;
int midIndex = mLowerBound+(mHigherBound-mLowerBound)/2;
if( pSearchedItem < pArray[midIndex] )
return getIndexOfItemRecursively(pSearchedItem, pArray, mLowerBound, midIndex-1);
else if(pSearchedItem>pArray[midIndex])
return getIndexOfItemRecursively(pSearchedItem, pArray, midIndex+1, mHigherBound );
else
return midIndex;
}
int findIndexOfItem( int pSearchedItem, int* pArray, int pTotalItemCount )
{
return getIndexOfItemRecursively(pSearchedItem, pArray, 0, pTotalItemCount-1);
}
int main(int argc, char* argv[])
{
int mArray[] = {1, 2, 4, 12, 34, 45, 56, 67, 78, 89, 90};
int mLengthOfArray = sizeof(mArray)/sizeof(int);
printf("There are %d items in the array\n", mLengthOfArray);
printf("Items :\n");
for(int i = 0; i<mLengthOfArray; i++)
{
if( i!=mLengthOfArray-1 )
printf("%d,", mArray[i]);
else
printf("%d\n", mArray[i]);
}
printf("Indexes :\n");
for(int i = 0; i<mLengthOfArray; i++)
{
if( i!=mLengthOfArray-1 )
printf("%d,", i);
else
printf("%d\n\n", i);
}
int mSearchItem = 12;
int mIndex = findIndexOfItem( mSearchItem, mArray, mLengthOfArray );
if( mIndex!=-1 )
printf("Item %d is at index %d\n", mSearchItem, mIndex);
else
printf("Item %d not found in the array\n",mSearchItem);
mSearchItem = 89;
mIndex = findIndexOfItem( mSearchItem, mArray, mLengthOfArray );
if( mIndex!=-1 )
printf("Item %d is at index %d\n", mSearchItem, mIndex);
else
printf("Item %d not found in the array\n",mSearchItem);
mSearchItem = 91;
mIndex = findIndexOfItem( mSearchItem, mArray, mLengthOfArray );
if( mIndex!=-1 )
printf("Item %d is at index %d\n", mSearchItem, mIndex);
else
printf("Item %d not found in the array\n",mSearchItem);
return 0;
}
We can analyze the steps for the first search item 12.
Search for 12
:
- Find midPoint. For this case midPoint is at index 5. If the searchItem (12) is less than the item at index midPoint (45) then update higherBound value with midpoint-1.
- Search in the new range with new higherBound value. higherBound is now midPoint-1. And lowerBound is 0.
New Sub Array Shrinks To 5 Items:
- Find midPoint. For this case midPoint is at index 2. If the searchItem is higher than the item at index midPoint then update lowerBound value with midpoint+1.
- Search in the new range with new lowerBound value. lowerBound is now midpoint+1 and higherBound does not change for this case.
New Sub Array Shrinks To 2 Items :
- Find midPoint. For this case midPoint is at index 3.
- SearchedItem is not less than the item at midPoint.
- SearchedItem is not higher than the item at midPoint.
- Then item is at midPoint. Return index of midPoint.
When you run the above recursive binary search sample following console output is generated :



