二分查找有递归实现法和普通实现法,可以实现O(LogN)的算法复杂度:
#include<iostream>
using namespace std;
#define REC
#ifdef REC
/*****************************************************************************
* 函 数 名 : binarySearch
* 函数功能 : 二分查找递归实现
* 输入参数 : int array[] 待查找数组
int start 带查找起始
int end 带查找结尾
int key 待查找关键字
* 输出参数 : 无
* 返 回 值 :
* 调用关系 :
* 记 录
* 1.日 期: 2017年12月03日
* 作 者: zxz
* 修改内容: 新生成函数
*****************************************************************************/
int binarySearch(int array[],int start, int end,int key)
{
cout<<"############## recursive ###################"<<endl;
//递归终止条件
if(start > end)
{
return -1;
}
//取中间元素
int mid = (start+end)/2;
//匹配成功
if(array[mid]==key){
return mid;
}
//匹配下半段
else if(array[mid]>key)
{
binarySearch(array,start,mid-1,key);
}
//匹配上半段
else if(array[mid]<key)
{
binarySearch(array,mid+1,end,key);
}
}
#else
/*****************************************************************************
* 函 数 名 : binarySearch
* 函数功能 : 二分查找普通实现
* 输入参数 : int array[] 待查找数组
int start 带查找起始
int end 带查找结尾
int key 待查找关键字
* 输出参数 : 无
* 返 回 值 :
* 调用关系 :
* 记 录
* 1.日 期: 2017年12月03日
* 作 者: zxz
* 修改内容: 新生成函数
*****************************************************************************/
int binarySearch(int array[],int start, int end,int key)
{
cout<<"############## not recursive ###################"<<endl;
//循环进行条件
while(start<=end)
{
int mid=(start+end)/2;
if(array[mid]==key)
{
return mid;
}
else if(array[mid]>key)
{
end=mid-1;
}
else if(array[mid]<key)
{
start = mid+1;
}
}
//没有找到
return -1;
}
#endif
int main()
{
int array[]={1,2,3,4,5,6,7,8,9};
cout<<"Input key:"<<endl;
int key=-1;
cin>>key;
cout<<"Found:"<<binarySearch(array, 0, 8, key)<<endl;
return 0;
}