【java算法】二分搜索

二分法

二分搜索算法

  • 用于在有序集合中查找元素,时间复杂度为ologN
  • 二分具有二段性:给定条件可以将集合中元素分为两部分,一部分满足条件,一部分不满足条件

步骤!!!!!!!!

  • 首先将(有序)集合分成两段,左边段[left,n-1]右边段[n,right]
  • 若mid落在左半段(<n)left=mid
  • 若mid落在右半段(>=n)right=mid
  • 然后else中left向右移动(加1),right向左移动(减1)
  • 若出现left=mid,计算mid要向上取整(加1)
  • 勤加练习,必能掌握

java实现

int arr[]=new int[]{1,2,3,4,5,6};
int left=0,right=5;
int left1=0,right1=5;
int k=3;//要查找的值
while(left<right) {//查找上界
	int mid=(left+right)>>1;
	if(arr[mid]>=k) {//界限可变
			right=mid;
		}
	else {
			left=mid+1;
		}
	}
	while(left1<right1) {//查找下界
		int mid=(left1+right1+1)>>1;
		if(arr[mid]<k) {
			left1=mid;
		}
		else {
			right1=mid-1;
		}
	}
	System.out.println(left+" "+left1);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值