二分查找其实也使用了分治思想,只是比较简单。它是把一组数不断的分成两部分,每次把中间的数与所查找的数进行比较,不断的循环,知道找到所找的数或没找到。但是二分查找的前提是这组数是有序的。
#include<iostream>
using namespace std;
int binary_search(int a[],int low,int high,int key)
{
while(low<=high)
{
int mid=(low+high)/2;
if(key==a[mid]) 每次把中间的数与 key比较
return mid+1;
else if(a[mid]>key)
high=mid-1;
else
low=mid+1;
}
return -1;
}
int main()
{
int a[100],i,n,key;
cin>>n;
for(i=0;i<n;i++)
cin>>a[i];
cin>>key;
cout<<binary_search(a,0,n-1,key)<<endl;
return 0;
}
以下是二分查找的递归算法:
#include<iostream>
using namespace std;
int binary_search(int a[],int low,int high,int key)
{
if(low>high)
return -1;
int mid=(low+high)/2;
if(key==a[mid])
return mid+1;
else if(a[mid]>key)
{
high=mid-1;
return binary_search(a,low,high,key);
}
else
{
low=mid+1;
return binary_search(a,low,high,key);
}
}
int main()
{
int a[100],i,n,key;
cin>>n;
for(i=0;i<n;i++)
cin>>a[i];
cin>>key;
int t=binary_search(a,0,n-1,key);
cout<<t<<endl;
return 0;
}
事实上,递归的本质是代码的重用,可用循环实现。