算法_二分查找(java)

阅读 77

2022-03-12

文章目录


一、二分法

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

0 0 举报