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

yizhihongxing

下面是详细讲解“两种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实现二分查找的基本算法和递归算法,并且可以通过示例了解到如何在具体应用场景中使用这两种算法来查找元素。

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

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

相关文章

  • 微信小程序实现列表页的点赞和取消点赞功能

    下面是实现微信小程序列表页点赞和取消点赞的攻略。该攻略将分为以下几个步骤: 前置准备 列表页数据的绑定和渲染 点赞和取消点赞功能的实现 点赞和取消点赞功能的联动 示例说明 前置准备 在开始实现之前,你需要先了解微信小程序的基本知识,并且在微信开发者工具中创建一个小程序项目。你还需要准备一个与列表页数据相关的接口,用于获取列表页数据、点赞和取消点赞等操作。 列…

    Java 2023年5月30日
    00
  • SpringMVC中的拦截器详解及代码示例

    下面我来详细讲解“SpringMVC中的拦截器详解及代码示例”的完整攻略。 1. 什么是SpringMVC拦截器 在SpringMVC中,每个请求都由HandlerMapping将请求路由到Controller方法,中间可能会经过多个拦截器。拦截器可以对请求进行预处理和后处理。预处理包括权限判断、实例化一些参数对象等操作,后处理包括修改返回值、输出日志等操作…

    Java 2023年6月15日
    00
  • java连接mysql数据库实现单条插入和批量插入

    Java连接MySQL数据库实现单条插入和批量插入的攻略如下: 步骤1:下载MySQL Connector/J驱动 在Java中连接MySQL数据库需要用到MySQL Connector/J驱动,我们可以从MySQL官网(https://dev.mysql.com/downloads/connector/j/)上下载最新版本的Connector/J驱动,根据…

    Java 2023年5月19日
    00
  • 使用jQuery.form.js/springmvc框架实现文件上传功能

    下面是关于“使用jQuery.form.js/SpringMVC框架实现文件上传功能”的完整攻略,包含两个示例说明。 使用jQuery.form.js/SpringMVC框架实现文件上传功能 在本文中,我们将介绍如何使用jQuery.form.js和SpringMVC框架实现文件上传功能。 步骤1:添加依赖 首先,我们需要在pom.xml中添加SpringM…

    Java 2023年5月17日
    00
  • java实现的简单猜数字游戏代码

    下面是详细讲解 “Java实现的简单猜数字游戏代码” 的攻略: 思路 该猜数字游戏的思路如下:1. 系统随机生成一个数字。2. 玩家输入一个数字。3. 系统比较玩家输入的数字和系统生成的数字,提示玩家输入数字是大于还是小于系统生成的数字。4. 重复第2步和第3步,直到玩家猜中系统生成的数字。 代码实现 下面是代码实现的步骤: 步骤1: 导入所需的库和包 im…

    Java 2023年5月23日
    00
  • 使用JAVA实现http通信详解

    使用JAVA实现http通信可以通过以下几个步骤完成: 步骤1:引入相关包 在实现http通信之前,需要引入相关的包,这些包中包含了实现http通信所需要的类和方法。Java中实现http通信一般使用Apache提供的HttpComponents包,该包可以通过Maven引入,如下: <dependency> <groupId>org…

    Java 2023年5月18日
    00
  • 基于Maven的pom.xml文件详解

    基于Maven的pom.xml文件是Maven项目的核心配置文件,用于定义项目的各种依赖、属性、插件等信息。下面将对pom.xml文件的各个部分进行详细讲解,并配以示例进行说明。 1. 项目信息 项目信息是pom.xml文件的第一个配置部分,用于定义项目的名称、版本号、描述等基本信息。格式如下: <project> <groupId>…

    Java 2023年5月20日
    00
  • java把字符串写入文件里的简单方法分享

    以下是详细讲解Java把字符串写入文件里的简单方法分享的完整攻略。 准备工作 为了实现将字符串写入文件,我们需要先准备文件路径和字符串内容,这里以一个示例字符串和文件路径为例: String content = "Java is a programming language."; String filePath = "D:/ja…

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