二分查找代码和图解

二分查找也叫折半查找,每次可以去掉一半的查找范围,从而提高查找的效率;使用时要求数组按从小到大的顺序排列;
二分查找代码
public class Text03 {
public static void main(String[] args) {
int num=10;
int[]arr={1,2,3,4,5,6,7,8};
// 利用find Method1查找num在集合中的索引
int a=findMethod1(num,arr);
if (a!=-1){
System.out.println(“你所查找的元素在数组中的索引为:”+a);
}else {
System.out.println(“你所查找的元素不存在”);
}

}

private static int findMethod1(int num,int[]arr) {
    int min=0;
    int max=arr.length-1;
    while(min<=max){

// 定义指针,指针的位置为所查找数组的中间位置
int mid =(min+max)/2;
if (arr[mid]>num){
// mid指向的元素在num的右边
max=mid-1;
}else if (arr[mid]<num){
// mid指向的元素在num的左边
min=mid+1;
}else {
// mid指向的元素==number
return mid;
}
}
// 如果min>max说明num不存在,返回-1
return -1;
}
}
二分查找图解
在这里插入图片描述
第一次查找,mid=4<num,说明num在min的右边,min指针移动到
mid+1=5,mid=(max+min)/2=5;
在这里插入图片描述
此时再次对比mid<num,说明num在min的右边,min指针移动到mid+1=7,mid=(max+min)/2=7;在这里插入图片描述
此时再次对比mid<num,说明num在min的右边,min指针移动到mid+1=8,mid=(max+min)/2=8;在这里插入图片描述
此时再次对比mid<num,说明num在min的右边,min指针移动到mid+1=9,此时min>max,说明num不在数组中,返回值为-1;

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值