数据结构和算法之二分法查找

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

二分法查找,也称作二分查找折半查找,是一种在有序数组中快速查找特定元素的算法。它采用分治法思想,通过将问题划分为规模更小的子问题,并且通过对子问题的查找来解决原问题。

二分法查找的思路是不断地将数组一分为二,然后判断目标值在哪一部分,进而在该部分继续进行二分查找。具体步骤如下:

  1. 首先,设置左边界 left 为0,右边界 right 为数组的长度减1。
  2. 然后,计算中间值 mid 为左边界与右边界的平均值,并取整。
  3. 接着,比较中间值 arr[mid] 与目标值 target 的大小。如果相等,则返回索引 mid
  4. 如果 arr[mid] 大于 target,说明目标值在左半部分,将右边界 right 更新为 mid-1
  5. 如果 arr[mid] 小于 target,说明目标值在右半部分,将左边界 left 更新为 mid+1
  6. 重复步骤2至5,直到左边界大于右边界,表示数组中无目标值,返回-1。

说明:

  • 开始时,初始化左指针l指向数组的首元素,右指针r指向数组的尾元素。
  • 判断左指针l是否大于右指针r,如果是则表示没有找到目标值,结束查找。
  • 每次都取左指针l和右指针r中间的元素作为中间值。
  • 判断中间值是否等于目标值,如果是则表示找到目标值,结束查找。
  • 如果中间值大于目标值,说明目标值在左半部分,更新右指针r为中间值的前一个位置,继续查找。
  • 如果中间值小于目标值,说明目标值在右半部分,更新左指针l为中间值的后一个位置,继续查找。
  • 继续进行以上步骤,直到找到目标值或者确定没有目标值。

示例代码:

function binarySearch(arr, target) {
   let left = 0; // 定义左边界指针为数组的起始位置
   let right = arr.length - 1; // 定义右边界指针为数组的末尾位置

   while (left <= right) { // 当左边界指针小于等于右边界指针时执行循环
     let mid = Math.floor((left + right) / 2); // 计算中间元素的位置,向下取整

     if (arr[mid] === target) { // 如果中间元素等于目标值
       return mid; // 返回中间元素的位置
     } else if (arr[mid] < target) { // 如果中间元素小于目标值
       left = mid + 1; // 移动左边界指针到中间元素的下一个位置
     } else { // 如果中间元素大于目标值
       right = mid - 1; // 移动右边界指针到中间元素的前一个位置
     }
   }

   return -1; // 如果循环结束仍未找到目标值,则返回-1
}

// 示例使用
let arr = [1, 3, 5, 7, 9];
let target = 5;

let result = binarySearch(arr, target);
console.log(result); // 输出 2

在上面的示例中,提供了一个有序数组 arr 和目标值 target,然后调用 binarySearch 函数进行二分查找。最后输出的结果为目标值在数组中的索引,如果不存在则返回-1。文章来源地址https://www.toymoban.com/news/detail-698258.html

左边界指针 右边界指针 中间元素位置 中间元素值 目标值 结果
0 4 2 5 5 2

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

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

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

相关文章

  • 【算法】—二分法详解

    ①定义: 二分查找算法也称折半搜索算法,对数搜索算法,是一种在 有序数组 中查找某一特定元素的搜索算法。搜索过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜索过程结束;如果某一特定元素大于或者小于中间元素,则在数组大于或小于中间元素

    2024年02月09日
    浏览(35)
  • 算法:二分法---寻找H指数

    1、题目: 给你一个整数数组 citations ,其中 citations[i] 表示研究者的第 i 篇论文被引用的次数。计算并返回该研究者的 h 指数 。 根据维基百科上 h 指数的定义: h 代表“高引用次数” ,一名科研人员的 h 指数 是指他(她)至少发表了 h 篇论文,并且每篇论文 至少 被引用

    2024年02月08日
    浏览(32)
  • 06-C++ 基本算法 - 二分法

    在这个笔记中,我们将介绍二分法这种基本的算法思想,以及它在 C++ 中的应用。我们将从一个小游戏猜数字开始,通过这个案例来引出二分法的概念。然后我们将详细讲解什么是二分法以及它的套路和应用。最后,我们还会介绍 C++ STL 中的二分查找函数。让我们一起来探索

    2024年02月16日
    浏览(30)
  • 初阶算法(3):二分法的讲解与实现(C语言),以及二分不止光在有序数组中的应用

     第一章 初阶算法(1):通过简单的排序算法来认识时间复杂度  第二章 初阶算法(2):进行详细地介绍插入排序的细节和时间复杂度  第三章 初阶算法(3):二分法的讲解与实现,以及二分不止光在有序数组中的应用 目录 系列文章目录 前言 一、二分法的讲解与实现

    2024年02月14日
    浏览(27)
  • 数据结构算法--1 顺序查找二分查找

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

    2024年02月12日
    浏览(38)
  • Java数据结构与算法:查找算法之二分查找

    大家好,我是免费搭建查券返利机器人赚佣金就用微赚淘客系统3.0的小编,欢迎回到本专栏。在这个冰冷的季节里,我们将一同探讨Java中一种高效的查找算法——二分查找。让我们点燃知识的火花,一同解锁这个查找奇迹的秘密! 二分查找简介 二分查找,也称为折半查找,

    2024年01月21日
    浏览(34)
  • 数据结构,查找算法(二分,分块,哈希)

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

    2024年02月11日
    浏览(41)
  • 【数据结构与算法】python实现二分查找

    二分查找 又称折半查找,它是一种效率较高的查找方法 原理:首先,假设表中元素是按升序排列,将表中间位置记录的与查找比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的大于查找,则

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

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

    2023年04月20日
    浏览(35)
  • 初探二分法

    智能化校园:深入探讨云端管理系统设计与实现(一) 智能化校园:深入探讨云端管理系统设计与实现(二) 题目:给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。 提示: 你可以

    2024年01月25日
    浏览(44)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包