递归:
#include <iostream>
using namespace std;
bool binary(int *arr,int low,int high,int flag,int &temp)
{
int middle;
if(low>high)
return false;
middle=(low+high)/2;
if(arr[middle]==flag)
{
temp=middle;
return true;
}
if(arr[middle]<flag)
return binary(arr,middle+1,high,flag,temp);
else
return binary(arr,low,high-1,flag,temp);
}
int main()
{
while(1)
{
int arr[100];
for(int i=0;i<10;i++)
cin>>arr[i];
int temp;
int abc;
cout<<"输入要查找的数:(限定了十个数)"<<endl;
cin>>abc;
if( binary(arr,0,9,abc,temp) )
{
if(arr[temp]==abc)
cout<<"二分查找成功"<<endl;
}
}
return 0;
}
非递归:
#include <iostream> //二分法非递归实现。
#include <algorithm>
using namespace std;
int arr[100];
int temp;
bool binary(int low,int high,int &ans)
{
while(low<=high)
{
int middle=(low+high)/2;
if(arr[middle]==temp)
{
ans=middle;
return true;
}
if(arr[middle]<temp)
low=middle+1;
if(arr[middle]>temp)
high=middle-1;
}
return false;
}
int main()
{
int n;
cout<<"请输入n"<<endl;
while(cin>>n)
{
cout<<"请输入数组中的数(按照顺序输入)"<<endl;
for(int i=0;i<n;i++)
cin>>arr[i];
cout<<"请输入要查找的数据"<<endl;
cin>>temp;
int ans;
if(binary(0,n-1,ans))
{
cout<<"要查找的数据在第"<<ans+1<<"个"<<endl;
}
else
cout<<"没找到。"<<endl;
}
return 0;
}