二分查找基础

时间秒杀一切 提交于 2019-12-01 10:16:00

二分查找基础

那么今天我们就来讲一下二分查找吧。。。

二分查找。二分:二等份的意思。那么二分查找的含义也就是每次二等份查找,不断缩小查找范围。

举个例子,假如我们要玩一个猜数字游戏,给定范围,你要做的就是在这个区间随机猜一个数字,判官会告诉你高了或者是低了,知道判官告诉你回答正确。这其实就是二分查找的核心思想。

二分查找可以用在多种途径,也可以用在大型的项目当中,可以起到点睛之笔的效果。

下面我们模拟二分查找,我们要做的事情就是,在【1,n】区间寻找正确答案x,

 

 

 现在你理解二分查找的核心含义了吗?那么,下面用代码体现出来:

 1 int a[n];
 2 int left = 1,right = n;
 3 int mid,mark = 0;
 4 while(left<=right){
 5     mid = (left+right)/2;    //这里容易出现bug
 6     if(a[mid]>=x){        //精简写法, 为了防止陷入死循环
 7         mark = mid;
 8         right = mid-1;
 9     }
10     else{
11         left = mid+1;
12     }
13     if(mark){
14         cout<<mark<<endl;
15     }
16 }

 

上面第5行容易出bug,为什么呢,,当n足够大的时候,left+right容易爆int(意思是,int值很可能溢出),那么整个程序就错了,那么该如何解决呢,

不妨使用下面方法:

1 mid = left+((right-left)>>1);

扩充:1.number>>1 等同于 number/2 (值得注意的是,只限整型,所以这意味着,运算的结果是向下取整的数)

    2.位运算的运算级别没有四则运算的高,所以说,,后面的内容必须要括号括起来

 

那么,初步的二分查找就是这样了。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!