简单的二分查找

本文深入讲解了二分查找算法在有序无重复int数组中的应用,包括详细的代码实现及关键细节解析,如低位指针和高位指针的更新策略。

1.简介

    这里所讲解的简单的二分查找指的是在一个有序无重复元素的int类型的数组中查找需要的元素。

2.代码

    public int binarySearch(int[] a ,int value){
		int low = 0, hi = a.length - 1;
    	while(low <= hi){
    		int mid = low + ((hi - low)>>1);
    		if(a[mid] == value){
    			return mid;
    		}else if(a[mid] < value){
    			low = mid + 1;
    		}else if(a[mid] > value){
    			hi = mid - 1;
    		}
    	}
    	return -1;
    }

代码分析

举例:数组

int[] a = {2,3,5,7,8,10};
  1. low <= hi
    在进行二分查找的时候,当低位指针和高位指针相遇时,如果还没有找到要找的元素,这个时候就可以跳出循环了。

  2. low = mid + 1
    low不能mid(low=mid),假设low=mid,hi=mid - 1;当我们要找的元素 value >= max(数组中最大的元素),我们会找不到元素,也无法跳出循环 以举例数组为例,当我们要找 10 时,当 low = mid 这一步使 low = 4时;这时 low<=hi, int mid = low + ((hi - low)>>1) = 4, 这时mid的值没法再增加,low也会一直为4,虽然数组中有10,但是我们无法跳出循环,也无法找到10。

  3. hi = mid - 1
    hi不能为mid(hi=mid),假设 low = mid + 1 , hi = mid;当我们要找的元素 value < min(数组中最小的元素),数组中没有元素,但是无法跳出循环。以举例数组为例,当我们要找1时, 当 hi = mid 这一步使 hi = 0时;这时 low<=hi,int mid = low + ((hi - low)>>1) = 0, 这时 mid的值没法再减小, hi也会一直为0,虽然数组中没有1,但是无法跳出循环。

总结

    在对一个有序无重复的int数组进行二分查找的时候,就是不断的折半,直到高低位指针相遇跳出循环。还有要注意的就是当折半后low = mid + 1和hi = mid - 1 这些小细节。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值