二分法查找

二分法查找 ,只能针对于有序数据进行查找,无序数据无法使用二分法查找。

有序数组:{1,2,3,4,4,5,6,7,7,8} 这个可以使用二分法查找

无序数组:{33,3,45,6,575,76,67,676} 这个无法使用二分法查找


二分法查找规则:

如,查询数组{1,3,4,5,6,7,8,8,43,54,55,77,88,99}中的77所在下标,查找方法为

1、获取下标最小值  0

2、获取下标最大值 array.length-1

3、获取中间的下标,也就是(最小值 +最大值 )/2

4、拿中间下标的值 对比 77,发现中间值 < 77,那么,更改最小值 = 中间值+1,最大值 不变

5、获取中间下标(最小值 +最大值 )/2

6、再次拿数组的中间下标值 对比77,按上叙方法进行对比,依次类推,直到对比完为止


代码如下:

public static void main(String[] args){
		int[] array = {1,3,4,5,6,7,8,8,43,54,55,77,88,99};
		int index = findIndex(array,99);
		System.out.println("查找到值的下标为:"+index);
	}
	
	public static int findIndex(int[] array,int num){
		//最小值 
		int min = 0;
		//最大值 
		int max = array.length-1;
		//中间下标值 
		int midd = (max+min)/2;
		//用以结束循环,防止死循环
		int end = max;
		//如果查找的数组不等于数组的中间值,则进行循环
		while(num != array[midd]){
			//如果数组的中间值大于查找值,则将最大值= 中间下标值-1
			if(array[midd] > num){
				max = midd-1;
			}else{
				//如果数组的中间值小于查找值,则将最小值= 中间下标值+1
				min = midd+1;
			}
			//重新获取中间值
			midd = (max + min)/2;
			//获取结束值 ,因为二分法是取中间值进行对比,相当于除于2,所以结束值也相应除以2
			end = end /2;
			//如果结束值 等 于0了,说明要查找的值不存在于数组中,没有必须再次循环了,否则,会进入死循环
			if(end == 0){
				return -1;
			}
		}
		//返回查找到值的下标
		return midd;
	}

结果:

查找到值的下标为:13


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值