一、二分法
理解:把答案所在的区间逐渐缩小,直到区间内只有答案
基础了解:
Array.toString() 打印数组 将数组转化为String类型的输出
sort()对数进行i排序 默认是升序
适用:寻找一个数,寻找左侧边界,寻找右侧边界
注意:
计算时为了防止数组溢出,mid=left+(right-left)来表示
二、应用:三种情况讨论
1.寻找一个数
代码如下(示例):
int Binarysearch(int a[],int target) { int left=0; int right=a.length-1; while(left<=right)//搜索为空的时侯终止 { int mid = left+(right-left)/2; if(a[mid] == target) { return mid; } if(a[mid]>target) { right = mid-1; } if(a[mid]<target) { left = mid+1; } } return -1; }
2.寻找左侧边界
代码如下(示例):
int left_search(int a[],int target) { int left =0; int right = a.length; while(left<right) { int mid = left+(right-left)/2; if(a[mid]==target) { right = mid; } if(a[mid]<target) { left=mid+1; } if(a[mid]>target) { right=mid; } } return left; }
3.寻找右侧边界
int right_search(int a[],int target) { int left =0; int right = a.length; while(left<right) { int mid = left+(right-left)/2; if(a[mid]==target) { left = mid+1; } if(a[mid]<target) { left=mid+1; } if(a[mid]>target) { right=mid-1; } } return left-1; }