Java数据结构与算法之二分查找详解

 更新时间:2023年12月18日 09:34:54   作者:暴躁的程序猿啊  
这篇文章主要介绍了Java数据结构与算法之二分查找详解,二分查找算法是一种在有序数组中查找某一特定元素的搜索算法,其思想就是不断地将有序查找表“一分为二”,逐渐缩小搜索区域,进而找到目标元素,需要的朋友可以参考下

Java二分查找

使用前提:二分查找需要在有序数组中进行查找

需求

请对一个有序数组进行二分查找{1,8,10,89,1000,1024},输入一个数字看看该数组中是否存在此数,并且求出下标,如果没有就返回“-1”

思路分析:

首先确定该数组的中间下标

1.mid=(left+right)/2

2.然后让需要查找的数findval和arr[mid]比较

  • findval>arr[mid]说明你要查找的数字在mid的右边,因此需要递归的向右进行查找
  • findval<arr[mid]说明你要查找的数字咋mid的左边,因此需要递归的向左进行查找
  • findval==arr[mid]说明找到,就返回

什么时候需要结束递归?

1.找到了数据就结束递归

2.递归完整个数组,仍然没有找到findval,也需要结束递归 当left>right就需要退出

代码实现

/**
 * 二分查找
 * 使用二分查找的前提 数组必须有序  从小到大 从大到小都可以
 *
 * @create: 2021/10/2
 * @author: Tony Stark
 */
public class BinarySearch {
    public static void main(String[] args) {
        int[] arr = {1, 8, 10, 89, 1000, 1024};
        int i = binarySearch(arr, 0, arr.length - 1, 1024);
        System.out.println(i);
    }
    /**
     * 二分查找的方法
     * @param arr  数组
     * @param left   左边的索引
     * @param right   右边的索引
     * @param findVal  要查找的值
     * @return  如果找到就返回下标  ,没有找到就返回-1
     */
    public static int binarySearch(int[] arr,int left,int right,int findVal){
        //当left大于right时说明递归了整个数组但是没有找到
        if (left>right){
            return -1;
        }
        //中间值的下标
        int mid=(left+right)/2;
        //中间值
        int midVal=arr[mid];
        //如果要找的值大于中间值   向右递归  现在数组是从小到大  所以向右递归
        if (findVal>midVal){
              //向右递归
           return binarySearch(arr,mid+1,right,findVal);
        }else if(findVal<midVal){
            //如果要找的值小于中间值向左递归
            return binarySearch(arr, left,mid-1, findVal);
        }else if (findVal==midVal){
            //这种情况就是找到了那个数字
            return mid;
        }
        return -1;
    }
}

输出

5

到此这篇关于Java数据结构与算法之二分查找详解的文章就介绍到这了,更多相关Java二分查找内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 浅谈Apache Maven ToolChains的使用

    浅谈Apache Maven ToolChains的使用

    Maven是java中非常有用和常用的构建工具,基本上现在大型的java项目都是Maven和gradle的天下了。本文将介绍Apache Maven ToolChains的使用。
    2021-06-06
  • Java rmi远程方法调用基本用法解析

    Java rmi远程方法调用基本用法解析

    这篇文章主要介绍了Java rmi远程方法调用基本用法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-05-05
  • Java批量操作文件系统的实现示例

    Java批量操作文件系统的实现示例

    文件上传和下载是java web中常见的操作,本文主要介绍了Java批量操作文件系统的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-03-03
  • SpringBoot中5种动态代理的实现方案

    SpringBoot中5种动态代理的实现方案

    在SpringBoot应用中,动态代理被广泛用于实现事务管理、缓存、安全控制、日志记录等横切关注点,下面小编为大家介绍一下SpringBoot中5种动态代理的实现方案吧
    2025-04-04
  • Spring Security实现身份认证和授权的示例代码

    Spring Security实现身份认证和授权的示例代码

    在 Spring Boot 应用中使用 Spring Security 可以非常方便地实现用户身份认证和授权,本文主要介绍了Spring Security实现身份认证和授权的示例代码,感兴趣的可以了解一下
    2023-06-06
  • Java判断字节流是否是 UTF8编码方法示例

    Java判断字节流是否是 UTF8编码方法示例

    这篇文章主要我大家介绍了Java判断字节流是否是 UTF8编码方法示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-07-07
  • Spring boot中PropertySource注解的使用方法详解

    Spring boot中PropertySource注解的使用方法详解

    这篇文章主要给大家介绍了关于Spring boot中PropertySource注解的使用方法,文中通过示例代码介绍的非常详细,对大家学习或者使用Spring boot具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧。
    2017-12-12
  • SpringBoot中的Aop用法示例详解

    SpringBoot中的Aop用法示例详解

    这篇文章主要介绍了SpringBoot中的Aop用法,本文结合示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-12-12
  • 使用nexus3.X上传本地jar包并且通过pom读取的解决方案(全网最新)

    使用nexus3.X上传本地jar包并且通过pom读取的解决方案(全网最新)

    这篇文章主要介绍了使用nexus3.X上传本地jar包并且通过pom读取的解决方案(全网最新),本文内容有点长,结合图文实例给大家讲解的非常详细,需要的朋友可以参考下
    2023-11-11
  • 微信企业号验证/发送/接收消息

    微信企业号验证/发送/接收消息

    这篇文章主要介绍了微信企业号验证/发送/接收消息的相关资料,非常不错具有参考借鉴价值,需要的朋友可以参考下
    2016-10-10

最新评论