//原数组必须的已排序好的数组,否则折半查找无法实现
#include <iostream>
using namespace std;
//折半查找的递归方法实现
int BSearch(int *arr,int key,int low,int high)
{
if(low>high)
return -1;
int mid=(low+high)/2;
if(key==arr[mid])
return mid;
else if(key<arr[mid])
return BSearch(arr,key,low,mid-1);
else
return BSearch(arr,key,mid+1,high);
}
//折半查找的非递归方法实现
/*
int BSearch(int *arr,int key,int len)
{
int low=0,high=len-1;
while(low<=high)
{
int mid=(low+high)/2;
if(key==arr[mid])
return mid;
else if(key<arr[mid])
high=mid-1;
else
low=mid+1;
}
return -1;
}
*/
int main()
{
int arr[]={1,2,3,4,5,6,7};
int len=sizeof(arr)/sizeof(arr[0]);
cout<<"原数组的元素为:\n";
for(int i=0;i<len;++i)
cout<<" "<<arr[i];
cout<<endl;
cout<<"\n请输入要查找的数字:";
int key;
cin>>key;
int result=BSearch(arr,key,0,len-1);
cout<<"\n 元素 "<<key<<" 的位置是: "<<result+1<<"\n\n";
return 0;
}