二分查找的介绍和最基本的代码实现
我们前面将十种基本的排序方法全部学习了一遍,排序的重要意义就是为检索带来方便。试想有106个整数,在这些整数里面寻找是否包含12345这个整数,就需要将整个数组遍历106次。而如果先将数组A排序号,就可以查找的更快。
我们这里学习的更快的查找方式就是二分查找(Binary Search),有时也被称为折半查找。其实就是我们经常玩的一个猜数字的游戏:一个人在心中想了一个不超过1000的正整数,这里我们假设为520(好的,爱你),我们可以保证在10次之内猜到它(对于我们每次猜测的数,那个人会告诉我们大了小了还是正好),猜的方法的核心思想就是“二分”,具体猜的方法如下:
第一次猜测(0+1000)/2=500,小了。
第二次猜测(500+1000)/2=750,大了。
第三次猜测(500+750)/2=625,大了。
第四次猜测(625+500)/2=562,大了。
第五次猜测(562+500)/2=531,大了。
第六次猜测(531+500)/2=515,小了。
第七次猜测(531+515)/2=523,大了。
第八次猜测(523+515)/2=519,小了。
第九次猜测(519+523)/2=521,大了。
第十次猜测(519+521)/2=520,猜到了
由于整个查找序列是一个单调的序列,于是我们可以每次“折半”我们的查找区间去查找我们想要的结果。这也就是二分查找的基本思路。
代码实现:
int Binary_Search(int*a,int target,int l,int r){
//l和r分别表示每次折半查找的查找区间的左右端点
while (l<r){