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

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

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

相关文章

  • 深入解析Java中的JDBC事务

    深入解析Java中的JDBC事务 什么是JDBC事务 JDBC事务是指,在Java程序中通过JDBC访问数据库时,由一组操作组成的逻辑单元。这些操作被当做一个整体,要么全部执行成功,要么全部回滚(撤销)。JDBC事务是为了保证操作的原子性、一致性、隔离性和持久性而存在的。 原子性 JDBC事务的原子性指,一个事务中所有的SQL语句要么全部执行成功,要么全部失…

    Java 2023年5月20日
    00
  • Java注释和关键字实例详解

    Java注释和关键字实例详解 Java注释 在Java中,注释是为了能够方便程序员自己和其他人理解代码所添加的。注释可以分为单行注释和多行注释。 单行注释 单行注释是以 // 开头,后面的所有内容都将被视为注释,直到该行结束。在注释中可以写入对代码的解释、注解、建议等。 示例代码如下: public class Main { public static vo…

    Java 2023年5月26日
    00
  • Java 数据结构之时间复杂度与空间复杂度详解

    Java 数据结构之时间复杂度与空间复杂度详解 什么是时间复杂度和空间复杂度 在了解时间复杂度和空间复杂度之前,我们需要先了解一下什么是复杂度。 在计算机科学中,复杂度是指算法的性能指标,主要包括时间复杂度和空间复杂度。 时间复杂度是指算法在执行过程中所需要的时间资源,通常用执行次数来表示,也被称为算法的渐进时间复杂度。 空间复杂度是指算法在执行过程中所需要…

    Java 2023年5月26日
    00
  • 深入讲解PHP的Yii框架中的属性(Property)

    来讲解一下“深入讲解PHP的Yii框架中的属性(Property)”的攻略。 简介 首先,我们来了解一下什么是Yii框架的属性(Property)。在Yii框架中,属性是类的重要组成部分。一个类的属性是指该类所包含的数据成员,它们用于存储对象的状态和构成对象的基本结构之一。在Yii框架中,属性通常需要在类声明中通过关键字声明,这些属性可以用来保存实例化对象的…

    Java 2023年6月15日
    00
  • 这是我的战争前期前五天玩法介绍

    我的战争前期前五天玩法介绍 在《我的战争》游戏中,前期的五天非常关键,这里提供一些玩家可以使用的策略来存活和发展。 1. 初期资源的获取 在游戏的开始,资源非常有限,但是这并不意味着你不能快速发展。第一天,最重要的任务是保持活下来,建立一个可以保护你的基地。最好的方法是寻找资源点并获得最初的几个资源,例如金属和木材,而不是在第一天建造建筑。 2. 建立初期的…

    Java 2023年6月16日
    00
  • Java元空间的作用是什么?

    Java元空间是Java虚拟机运行时数据区的一部分,它主要是用来存储类的元数据信息和静态变量。相较于传统的Java堆,Java元空间不再是一个连续的内存区域,而是使用本地内存或者操作系统提供的内存。下面,我将从以下几个方面进行详细讲解Java元空间的作用及相关攻略: Java元空间为什么会被引入? 在Java虚拟机中,类的元数据和静态变量原本是存放在永久代中…

    Java 2023年5月11日
    00
  • java实现简单的扫雷小游戏

    讲解”Java实现简单的扫雷小游戏”的攻略,以下是具体步骤: 第一步:界面设计 扫雷游戏主要分为三个步骤:游戏开始、游戏进行中、游戏结束。我们需要根据这些状态设计出对应的UI界面,具体需要设计的内容包括: 开始界面:包括游戏标题、游戏难度选择、开始游戏按钮。 进行中界面:包括剩余雷数、当前用时、扫雷主界面、游戏菜单等。 结束界面:包括胜利或失败的提示、重新开…

    Java 2023年5月19日
    00
  • Sprint Boot @NotBlank使用方法详解

    以下是关于Spring Boot中@NotBlank的作用与使用方法的完整攻略,包含两个示例: @NotBlank的作用 @NotBlank是Spring Boot提供的一个注解,用于验证字符串类型的请求参数是否为空或空格。它可以用于验证请求参数的有效性,以确保用程序的正确性和安全性。 @NotBlank的使用方法 以下是使用@NotBlank的示例: 验证…

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