0
点赞
收藏
分享

微信扫一扫

算法_二分查找(java)

小北的爹 2022-03-12 阅读 77
算法

文章目录


一、二分法

理解:把答案所在的区间逐渐缩小,直到区间内只有答案
基础了解:
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;
	}
举报

相关推荐

0 条评论