老师一直在强调二分法的重要性,我今天终于把二分法给看了。
二分法的思想在数学中也有。二分法之所以大受欢迎,与它的时间复杂度低是分不开的。
以下是用法套路:
//x:待查找的元素, n:数组集合大小, num数组单调递增
int low=0,high=n,mid,res = -1; //low:集合下界 high:集合上节
while(low<=high)
{
mid=(low+high)/2; //mid:将集合分割为两部分
if(num[mid]==x) //查找到符合元素x
{
res = mid;
break;
}
else if(num[mid]<x)//x在右边部分,调整集合下界
low=mid+1;
else //x在左边部分,调整集合上界
high=mid-1;
} //若未找到x,则res = -1
一般情况下,直接往代码里套是没问题的,但还是要注意具体问题具体分析,偏右查找还是偏左查找,也要依据题意而定,选择最优法。