Java算法之【二分查找】

【二分查找法】
在java面试过程中,经常有笔试题,或者直接被问道,如果快速判断某个数字是否包含在数组中。
如果你之前没有了解过二分算法,可能第一反应就是循环遍历依次比较,或者建立哈希表去查询。其实效率最高的,应该数【二分查找】了。
那什么是【二分查找呢】?
不知道在聚会的时候,大家有没有玩过这样一个游戏…【猜数字】
出题玩家随便写一个100以内的数字(当然这个数字只有自己知道),然后其他玩家猜,猜大了提示大了,猜小了提示小了,越到后面,猜的范围也越来越小了,直到有人猜中,或者剩下最后一个数被迫猜中,从而接受惩罚。
猜答案有一定随机性,但如果每次把范围都缩小一半的话,猜中的几率不也就越来越大了???
【二分查找】就是这个原理了,一个长度可能很大很大的数组,我们可能只查找了不到10次就找出来了,跟之前的依次遍历挨个判断效率明显提升不少!!!!
【下图1展示了代码实现,输出数组中某个数字的坐标。】
这里有一点需要注意,因为每个数据类型都有自己最大长度,为了防止溢出,我们一般用mid=start+(end-start)/2 来代替mid=(start+end)/2

public static int binarySearch(int []array,int target){
//查找范围起点
int start=0;
//查找范围终点
int end=array.length-1;
//查找范围中位数
int mid;
while(start<=end){
//mid=(start+end)/2 有可能溢出
mid=start+(end-start)/2;
if(array[mid]==target){
return mid;
}else if(array[mid]<target){
start=mid+1;
}else{
end=mid-1;
}
}
return -1;
}
public static void main(String[] args) {
int[] array = new int[1000];
for(int i=0; i<1000;i++){
array[i] = i;
}
System.out.println(binarySearch(array, 173));
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值