Java 语言实现二分查找算法

这篇具有很好参考价值的文章主要介绍了Java 语言实现二分查找算法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

【引言】
二分查找算法是一种高效且常用的查找算法。它适用于已排序的数组或列表,并通过将目标值与中间值进行比较,来确定目标值在左侧还是右侧。本文将使用Java语言实现二分查找算法,并详细讲解其思想和代码实现。

【算法思想】
二分查找的核心思想是不断缩小查找区间。具体步骤如下:

  1. 将查找的区间定义为[low, high],其中low为最小索引,high为最大索引。
  2. 计算中间索引mid,并将中间值与目标值进行比较。
  3. 如果中间值等于目标值,则返回中间索引。
  4. 如果中间值大于目标值,则说明目标值在左侧,将high更新为mid-1,继续在[left, mid-1]区间内进行查找。
  5. 如果中间值小于目标值,则说明目标值在右侧,将low更新为mid+1,继续在[mid+1, right]区间内进行查找。
  6. 重复步骤2-5,直到找到目标值或区间缩小到无法再分割。

【Java代码实现】
下面是用Java语言实现二分查找算法的代码:

public class BinarySearch {
    public static int binarySearch(int[] arr, int target) {
        int low = 0;
        int high = arr.length - 1;

        while (low <= high) {
            int mid = low + (high - low) / 2;

            if (arr[mid] == target) {
                return mid;  // 返回目标元素的索引
            } else if (arr[mid] > target) {
                high = mid - 1;  // 在左侧区间进行查找
            } else {
                low = mid + 1;  // 在右侧区间进行查找
            }
        }

        return -1;  // 目标元素未找到
    }

    public static void main(String[] args) {
        int[] arr = {1, 3, 5, 7, 9};
        int target = 7;
        int index = binarySearch(arr, target);

        if (index != -1) {
            System.out.println("元素 " + target + " 在数组中的索引为 " + index);
        } else {
            System.out.println("元素 " + target + " 未在数组中找到");
        }
    }
}

【代码解析】
在代码中,我们定义了一个静态方法binarySearch来执行二分查找。它接受一个已排序的整数数组和目标元素作为输入。通过不断缩小查找区间,最终找到目标元素的索引,或者返回-1表示目标元素未找到。

main函数中,我们创建了一个已排序的测试数组和目标元素,并调用binarySearch方法进行查找。最后,我们将查找结果输出到控制台。

【时间复杂度和稳定性】
二分查找算法的时间复杂度为O(logn),其中n表示数组的大小。由于每次查找都将查找区间缩小一半,因此二分查找算法比线性查找更高效。

二分查找算法是一种稳定的查找算法,因为它按照一定的规则进行比较和缩小区间,不会改变元素的相对顺序。

【总结】
本文使用Java语言实现了二分查找算法,并详细讲解了其思想和代码实现。二分查找算法是一种高效且常用的查找算法,特别适用于已排序的数组或列表。希望本文对于理解和应用二分查找算法有所帮助。文章来源地址https://www.toymoban.com/news/detail-678744.html

到了这里,关于Java 语言实现二分查找算法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【算法与数据结构】Java实现查找与排序

    也叫做折半查找,属于有序查找算法。 前提条件 :数组数据必须有序,从小到大,或者从大到小都是可以的。 如果是无序的,也可以先进行排序。 但是排序之后,会改变原有数据的顺序,查找出来元素位置跟原来的元素可能是不一样的,所以排序之后再查找只能判断当前数

    2024年01月19日
    浏览(38)
  • 数据结构算法--1 顺序查找二分查找

    顺序查找时间复杂度为O(n) 我们可以借助Python中的函数enumerate,通过enumerate遍历列表返回其索引和值 也可以通过列表长度依次遍历: 但是二分查找时间复杂度为O(logn):

    2024年02月12日
    浏览(41)
  • 数据结构,查找算法(二分,分块,哈希)

    一、查找算法         1、二分查找:(前提条件: 必须有序的序列) 2、分块查找:(块间有序,块内无序)     索引表  +  源数据表     思路:     (1)先在索引表中确定在哪一块中     (2)再遍历这一块进行查找 //索引表 typedef  struct  {     int max; //块中最大值

    2024年02月11日
    浏览(46)
  • Python数据结构与算法篇(五)-- 二分查找与二分答案

    1.1 定义         二分查找又称折半查找、二分搜索、折半搜索等,是一种在静态查找表中查找特定元素的算法。         所谓静态查找表,即只能对表内的元素做查找和读取操作,不允许插入或删除元素。         使用二分查找算法,必须保证查找表中存放的是有

    2023年04月20日
    浏览(37)
  • 数据结构和算法之二分法查找

    二分法查找,也称作 二分查找 或 折半查找 ,是一种在有序数组中快速查找特定元素的算法。它采用分治法思想,通过将问题划分为规模更小的子问题,并且通过对子问题的查找来解决原问题。 二分法查找的思路是不断地将数组一分为二,然后判断目标值在哪一部分,进而

    2024年02月09日
    浏览(34)
  • 数据结构-查找(顺序查找与二分查找的讲解与代码实现)

    顺序查找概念:从表的另一端开始,一次将记录的和给定值进行比较,若某个记录的和给定的值相等,则查找成功,反之则查找失败。 ASL:平均查找长度 pi查找概率,ci查找次数 eg:序列1,2,3 查找1的次数为1概率为1/3,2为两次概率1/3,3的次数为3概率1/3  将12

    2024年02月06日
    浏览(59)
  • 头歌(C语言)-数据结构与算法-查找-第1关:实现折半查找

    任务描述 相关知识 编程要求 测试说明 任务描述 本关要求通过补全函数 BSL_FindKey 来实现在已排序的顺序表中查找关键码值为 key 的结点并返回该结点的编号。 相关知识 折半查找通常是针对顺序存储的线性表,线性表的结点按关键码从小到大排序,后面称之为折半查找的顺序

    2024年02月10日
    浏览(44)
  • 数据结构——用Java实现二分搜索树

    目录 一、树 二、二分搜索树 1.二叉树 2.二分搜索树 三、代码实现 1.树的构建 2.获取树中结点的个数 3.添加元素 4.查找元素 (1)查找元素是否存在 (2)查找最小元素 (3)查找最大元素 5.二分搜索树的遍历 (1)前序遍历: (2)中序遍历: (3)后序遍历: (4)层序遍历

    2024年02月19日
    浏览(28)
  • Java-三个算法冒泡-选择排序,二分查找

    Java算法: 冒泡排序; 解析:将前后两个数对比,将大的数(或小的)调换至后面,每轮将对比过程中的最大(或最小)数,调到最后面。每轮对比数减一;初始对比数为数组长度-1. 选择排序: 解析:选择第一个数依次与其他元素对比,数值小的或(大的)交换位置至前方(

    2024年02月11日
    浏览(28)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包