快速学会如何使用Java实现“二分查找”算法(非递归版)

5 篇文章 0 订阅

概述

  二分查找也称折半查找(Binary Search),它算是效率比较高的一种查找算法,但是使用它有个前提就是要求线性表必须是顺序存储结构,而且表中元素按关键字有序排列。简单的说就是你要是用数组存储数据,那么你用二分查找的前提就是你的数组是从大到小或者从小到大排列好的。

思路

  二分查找的思路是先找到数组中的中间值,然后传入的数字和中间值比较,要是比中间值大就在数组后半部分查找,要是比中间值小就在数组前半部分查找。

源码

public class BinarySearch {
    public boolean binarySearch(int[] arr,int temp){
        //int temp是传入的数
        int first=0;//初始数组下标的头
        int last=arr.length-1;//初始数组下标的尾
        int mid;//数组中间值下标
        while (first<=last){
            mid=first+((last-first)/2);//first+((last-first)/2)和(last+first)/2相等,但是在这不直接用(last+first)/2
            if (arr[mid] == temp) {
                return true;
            }
            else if (temp > arr[mid]){
                first=mid+1;//头部的下标改变
            }
            else {
                last=mid-1;//尾部的下标改变
            }
        }
        return false;
    }
}

测试代码:

public class Test {
    public static void main(String[] args) {
        BinarySearch bs = new BinarySearch();//new一个bs对象,在堆栈里开辟空间
        int[] arry = new int[]{10,20,30,40,50,60};//定义一个数组
        boolean s = bs.binarySearch(arry,25);//赋值传递再调用
        System.out.println("是否查找到输入的数:"+s);//输出是否查找到输入的数
    }
}

测试结果截图

在这里插入图片描述

代码运行效果图

在这里插入图片描述

注意事项

  上述问题中我们说到first+((last-first)/2)和(last+first)/2相等,但是在这不直接用(last+first)/2,这是为什么呢?是因为(last+first)/2在一种极端的情况下会有溢出。
  当last+first的结果大于表达式结果类型所能表达的最大值时,就会产生溢出。溢出后再/2得到的结果就不正确了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值