二分查找(Java语言)

今天来总结一下二分查找吧!

 

什么是二分查找?

我的理解就是:

在一个   排序好   的数组上(必须排序好的数组),通过一个中间值(middle),不断的去排除数组左边或者右边的,不断的折半进行查询

 

就好比1,2,3,4,5,6,7,8这个数组,我要查询3

(我们在这里定义几个变量:left→数组最左边值;right→数组最右边值,middle→数组中间值)

首先,我们给left,right,middle初始化

 

int left = 0;
int right = ary.length - 1;
int middle = left + (right - left) / 2;


这样就定义好了,当然,middle可以不在这里先定义,可以在下面操作中赋值;

 

 

然后通过key值和ary[left]或者ary[right]不断比较,来将数组的范围不断缩小,逻辑如下:

if(key > ary[mid]) // 判断待查询的值大于数组中间值,则说明需要在数组右半部分比较查询,因此将左下标置为mid+1
	left = mid + 1;
else if(key < ary[mid]) // 判断待查询的值小于数组中间值,则说明需要在数组左半部分比较查询,因此将右下标置为mid-1
	right = mid - 1;
else // 否则查询到key值,并返回
	return key;

 

 

 

上面通过在循环不断比较和缩小范围,最终能得到key或者没有key对应的值,最终完成二分查找功能

 

下面贴出完整代码:

 

public class BrandrySearch {
	
	/**
	 * 二分查找方法
	 * @param ary 必须是有序数组!
	 * @param key 待查询的值
	 * @return
	 */
	public int getKeyValue(int ary[], int key)
	{
		// 确保ary是有序的!
		int left = 0; // 初始化数组左下标值
		int right = ary.length - 1; // 初始化数组右下标值
		int mid = 0; //定义二分查找中间下标
		while(left <= right) // 这里一定要小于等于,自行验证
		{
			mid = left + (right - left) / 2; // 获取中间下标
			if(key > ary[mid]) // 判断待查询的值大于数组中间值,则说明需要在数组右半部分比较查询,因此将左下标置为mid+1
				left = mid + 1;
			else if(key < ary[mid]) // 判断待查询的值小于数组中间值,则说明需要在数组左半部分比较查询,因此将右下标置为mid-1
				right = mid - 1;
			else // 否则查询到key值,并返回
				return key;
		}
		return -1; // 没有查询到则返回一个判断值-1
	}
}


以上为二分查询的完整方法,这里再次强调,数组必须是有序的(我之前写了一篇快速排序的方法,可以配合使用),希望和大家一起学习!

更多精彩敬请关注公众号

Java极客思维

微信扫一扫,关注公众号

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值