文章目录
一、二分法
理解:把答案所在的区间逐渐缩小,直到区间内只有答案
 基础了解:
 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;
	}










