两种java实现二分查找的方式

下面是详细讲解“两种java实现二分查找的方式”的攻略。

一、二分查找基本算法

二分查找算法的基本思想是:在一个有序数组中,查找一个元素,先找到数组的中间元素,然后将要查找的元素和中间元素进行比较,如果相等则直接返回中间元素,如果大于则在中间元素的右半部分继续查找,如果小于则在中间元素的左半部分继续查找,如此循环直到找到要查找的元素或者找不到为止。

Java实现二分查找基本算法的代码如下所示:

public static int binarySearch(int[] arr, int val) {
    int left = 0;
    int right = arr.length - 1;
    while (left <= right) {
        int mid = (left + right) / 2;
        if (arr[mid] == val) {
            return mid;
        } else if (arr[mid] < val) {
            left = mid + 1;
        } else {
            right = mid - 1;
        }
    }
    return -1;
}

其中,arr是要查找的有序数组,val是要查找的元素的值,如果找到则返回元素在数组中的下标,否则返回-1。

二、递归实现二分查找

除了上面介绍的基本算法以外,还可以使用递归的方式实现二分查找。递归实现二分查找的代码如下所示:

public static int binarySearchRecursive(int[] arr, int val, int left, int right) {
    if (left <= right) {
        int mid = (left + right) / 2;
        if (arr[mid] == val) {
            return mid;
        } else if (arr[mid] < val) {
            return binarySearchRecursive(arr, val, mid + 1, right);
        } else {
            return binarySearchRecursive(arr, val, left, mid - 1);
        }
    }
    return -1;
}

其中,arr是要查找的有序数组,val是要查找的元素的值,left表示要查找的数组区间的左边界,right表示要查找的数组区间的右边界。如果找到则返回元素在数组中的下标,否则返回-1。

三、示例说明

下面我们来演示一下使用两种方式查找一个有序数组中的元素。

假如要查找数组arr中的元素val=4,其中arr的元素为[1, 2, 3, 4, 5, 6, 7, 8, 9]。使用基本算法查找的代码如下:

int[] arr = {1, 2, 3, 4, 5, 6, 7, 8, 9};
int index = binarySearch(arr, 4);
System.out.println(index); // 输出:3

使用递归方式查找的代码如下:

int[] arr = {1, 2, 3, 4, 5, 6, 7, 8, 9};
int left = 0;
int right = arr.length - 1;
int index = binarySearchRecursive(arr, 4, left, right);
System.out.println(index); // 输出:3

从输出结果可以看出,使用两种方式都能成功找到数组中的元素val=4

四、总结

以上就是Java实现二分查找的两种方式的攻略,通过本攻略的介绍,读者可以了解到如何使用Java实现二分查找的基本算法和递归算法,并且可以通过示例了解到如何在具体应用场景中使用这两种算法来查找元素。

阅读剩余 40%

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:两种java实现二分查找的方式 - Python技术站

(0)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • Elasticsearch文档索引基本操作增删改查示例

    下面是关于“Elasticsearch文档索引基本操作增删改查示例”的完整攻略: 背景简介 Elasticsearch是一个基于Lucene的搜索引擎,该引擎被用于全文搜索、结构化搜索、分析和存储数据。在Elasticsearch中,文档操作通常包括以下内容:文档的增加、删除、修改和查询。 文档索引操作 创建索引 在Elasticsearch中,要创建一个索…

    Java 2023年5月26日
    00
  • jsp中session过期设置及web.xml配置学习

    下面是关于“jsp中session过期设置及web.xml配置学习”的完整攻略: 1. session过期设置 1.1 什么是session过期? 在jsp开发中,session在很多场合都扮演了非常重要的角色,他可以用来存储用户的登录状态、用户浏览过的历史页面、用户购物车等等。但是,session也会因为一些原因来使其“死亡”,也就是所谓的过期失效。 1.…

    Java 2023年6月15日
    00
  • Spring实现源码下载编译及导入IDEA过程图解

    接下来我会为你详细讲解“Spring实现源码下载编译及导入IDEA过程图解”的完整攻略。该攻略包含三个步骤:下载源码、编译代码、导入IDEA。 下载源码 首先,我们需要从官方网站(https://github.com/spring-projects/spring-framework)上下载Spring的源代码。下载方式有两种: 直接下载zip文件:在页面上方…

    Java 2023年5月26日
    00
  • Mybatis中SqlSession下的四大对象之执行器(executor)

    Mybatis是一款流行的ORM框架,SqlSession是其核心组件之一。在SqlSession中,有四大对象分别是:Configuration、Executor、StatementHandler和ResultSetHandler。其中,Executor是Mybatis中最重要的对象之一,本文将详细讲解Mybatis中SqlSession下的四大对象之执行…

    Java 2023年5月20日
    00
  • Fixie.js 自动填充内容的插件

    Fixie.js 是一个用于自动填充表单内容的 JavaScript 插件,可以自动填充表单、日期、时间等多种类型的数据。下面是使用 Fixie.js 的详细攻略: 第一步:引入 Fixie.js 将 Fixie.js 文件下载到本地,并在 HTML 中引入该文件,代码如下: <script src="path/to/fixie.js&quo…

    Java 2023年6月15日
    00
  • centos7下搭建ZooKeeper3.4中间件常用命令小结

    下面是详细讲解“centos7下搭建ZooKeeper3.4中间件常用命令小结”的完整攻略。 一、ZooKeeper介绍 ZooKeeper是一个分布式协调服务,可以用于分布式应用的协调管理。ZooKeeper提供了高可用性和高性能的数据管理和协调功能,这些功能包括配置管理、命名服务、分布式同步、群组服务等。 二、ZooKeeper安装 以下是在CentOS…

    Java 2023年5月20日
    00
  • Spring Boot JPA中java 8 的应用实例

    下面我将详细讲解“Spring Boot JPA中java 8 的应用实例”的完整攻略,让大家能够更加深入的了解这个话题。 什么是Spring Boot JPA Spring Boot JPA是基于Spring Boot和JPA的框架,它是Spring Boot与JPA框架的整合,使得我们更加便捷地操作JPA。它简化了JDBC的等式操作,大量减少了样板代码的…

    Java 2023年5月20日
    00
  • 详解如何在Spring Security中自定义权限表达式

    一、Spring Security自定义权限表达式概述 在Spring Security中,我们可以使用表达式来描述权限,这些表达式通常包含在配置文件或者注解中。然而,Spring Security默认的权限表达式并不一定能够满足我们的需求,因此我们可能需要自定义权限表达式。 要使用自定义的权限表达式,我们需要进行以下两步: 自定义Security Expr…

    Java 2023年6月3日
    00
合作推广
合作推广
分享本页
返回顶部