二分搜索算法是是运用分治策略的典型例子。
二分搜索算法的基本思想是将n个元素分成个数大致相同的两半,取a[n/2]与x进行比较,如果x=a[n/2],则找到x,算法终止,如果x<a[n/2],则只要在数组a的左半部继续搜索。
如果x>a[n/2],则只要在数组a的右半部进行搜索x。
#include<iostream.h>
class example
{
public:
int *a;
example(int n);
int binarySearch(int x,int n);
void print();
};
example::example(int n)
{
a=new int[n];
for(int i=0;i<n;i++)
a[i]=i+1;
}
void example::print()
{
for(int i=0;i<10;i++)
cout<<a[i]<<' ';
cout<<endl;
}
//***************************************************
int example::binarySearch(int x,int n)
{
int left=0,right=n-1;
while(left<=right)
{
int middle=(left+right)/2;
if(x==a[middle]) return middle+1; //找到,返回x的位置
if(x>a[middle]) left=middle+1; //x大于中间数,往右边查找
else right=middle-1; //x小与中间数,往左边查找
}
return -1;
}
//***************************************************
int main()
{
int sz;
example ob(10);
ob.print();
sz=ob.binarySearch(5,10);
cout<<sz<<endl;
return 0;
}