使用前提:
这个数列是一个有序数列,也就是0,1,4,6,7,88这样的
原理:
给出一个范围l到r,然后不断利用mid=(l+r)缩小范围,每次只取分成两半后的其中一边减一点(减一点的意思是减1,比如说既然array[mid]不是答案,那么下一次边界不用mid而用mid旁边的那个)
时间复杂度:O(logn)
图解:
然后放代码:
这是一个返回,如果数列范围中有这个就返回1,否则返回0
int binary_search(int l,int r,int key){ while(larray[mid])l=mid+1; else return 1; } return 0;}
比赛极速版
比赛的时候争分夺秒,哪怕懂原理,也最好一个算法的最短代码打到滚瓜烂熟,肯定是好的
int bs(int l,int r,int k){ while(la[d])l=d+1; else return 1; } return 0;}
int bs(int l,int r,int k){ while(la[d])l=d+1;else return 1;}return 0;}