二分搜索
二分搜索,简单来说,就是从对一个有序的排列中每次分一半进行查找元素。其算法思想就是:
(1)首先确定整个查找区间的中间位置mid=(left+right)/2;
(2)用待查关键字值与中间位置关键字值进行比较;若相等,则查找成功;若大于,则在后半个区域中继续进行折半查找。若小于,则在前半个区域中继续进行折半查找。
(3)查找成功,返回关键字所在数组下标,没找到返回-1。
template<class Type>
int BinarySearch(Type a[],int n,const Type&x)
{
int left=0;
int right=n-1;
while(left<=right) {
int mid=(left+right)/2;
if(x==a[mid])
return mid;
if(x>a[mid])
left=mid+1;
else
right=mid-1;
}
return -1;
}