准备阿里面试,整理了一下二分查找的递归与非递归实现方式,面试挺常见的。代码如下:
//二分查找的非递归实现
int binary_search(int array[],int n,int value)
{
int left=0;
int right=n-1;
while(left<=right)
{
int middle=left+(right-left)/2;
if(array[middle]>value)
right=middle-1;
else if(array[middle]<value)
left=middle+1;
else
return middle;
}
return -1;
}
//二分查找的递归实现
int binary_search(int array[],int left,int right,int value)
{
if(right<left)
return -1;
int middle=left+(right-left)/2;
if(array[middle]==value)
return middle;
else if(array[middle]>value)
return binary_search(array,left,middle-1,value);
else return binary_search(array,middle+1,right,value);
return -1;
}//二叉排序树查找非递归实现
bool BSTreeSearch(BinarySearchTree t,int value)
{
if(t==NULL)
return false;
while(t!=NULL)
{
if(t->m_nKey==value)
return true;
else if(t->m_nKey>value)
t=t->m_pLeft;
else
t=t->m_pRight;
}
return false;
}
//二叉排序树查找递归实现
bool BSTreeSerarch(BinarySearchTree t,int value)
{
if(t==NULL)
return false;
if(t!=NULL)
{
if(t->m_nKey==value)
return true;
else if(t->m_nKey>value)
return BSTreeSearch(t->m_pLeft,value);
else
return BSTreeSearch(t->m_pRight,value);
}
return false;
}