前言:首先第一要素需要明白,二分查找法适用于有序数组,记住,二分查找之前一定要排序!!!
int base=0;
int top=size-1;
while(base<=top){
mid=(top+base)/2;
if(v[mid]==target) break; //mid为所求下标
if(v[mid]<target) base=mid+1;
if(v[mid]>target) top=mid-1;
}
二分查找过程: 我们可以把整个查找过程看成是不停地聚拢top和base,执行下面两种操作
[mw_shl_code=java,true]if(v[mid]<target) base=mid+1;
if(v[mid]>target) top=mid-1;
即给定一个有序数组,找到元素i,使得i之前的元素(包括i)都不大于target,i之后的元素都大于target.
可以分两种情况来考虑
while(base<=top){
mid=(top+base)/2;
if(v[mid]<target) base=mid+1;
if(v[mid]>target) top=mid-1;
}while(base<=top){
mid=(top+base)/2;
if(v[mid]<=target) base=mid+1;
if(v[mid]>target) top=mid-1;
}while(base<=top){
mid=(top+base)/2;
if(v[mid]<=target) base=mid+1;
if(v[mid]>target) top=mid-1;
}| 欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) | 黑马程序员IT技术论坛 X3.2 |