当前位置: 首页> 汽车> 车展 > 数据结构与算法-二分查找

数据结构与算法-二分查找

时间:2025/7/13 5:45:38来源:https://blog.csdn.net/weixin_42560424/article/details/139358184 浏览次数: 0次

数据结构与算法-二分查找

大家好,欢迎回到我们的算法学习系列。今天,我们将探讨一个基本且高效的算法——二分查找。这种算法在处理有序数据时非常有用。

什么是二分查找?

二分查找(Binary Search)是一种在有序数组中查找某个元素的位置的算法。它通过每次将查找范围减半来缩小搜索范围,从而大大提高查找效率。

问题描述

给定一个有序数组和一个目标值,如果目标值在数组中,返回其索引;否则,返回 -1。

示例

  • 输入:nums = [-1,0,3,5,9,12], target = 9
    输出:4
  • 输入:nums = [-1,0,3,5,9,12], target = 2
    输出:-1

解决思路

二分查找的基本思想是每次将数组分成两半,逐步缩小搜索范围。具体步骤如下:

  1. 初始化左右指针:定义两个指针,left 指向数组的起始位置,right 指向数组的结束位置。
  2. 计算中间位置:计算中间位置的索引 mid
  3. 比较中间值与目标值
    • 如果中间值等于目标值,则返回 mid
    • 如果中间值小于目标值,则目标值在右半部分,更新 left
    • 如果中间值大于目标值,则目标值在左半部分,更新 right
  4. 重复步骤2和3:直到找到目标值或搜索范围为空。

实现代码

下面是用JavaScript实现这个算法的代码:

function binarySearch(nums, target) {let left = 0;let right = nums.length - 1;while (left <= right) {const mid = Math.floor((left + right) / 2);if (nums[mid] === target) {return mid;} else if (nums[mid] < target) {left = mid + 1;} else {right = mid - 1;}}return -1;
}

代码解析

  1. 初始化指针left 指向数组的起始位置,right 指向数组的结束位置。
  2. 循环查找
    • 计算中间位置 mid
    • 如果中间值 nums[mid] 等于目标值 target,返回 mid
    • 如果中间值小于目标值,说明目标值在右半部分,更新 leftmid + 1
    • 如果中间值大于目标值,说明目标值在左半部分,更新 rightmid - 1
  3. 返回结果:如果循环结束后仍未找到目标值,返回 -1

图解

让我们通过图解来理解二分查找的过程:

初始数组:

nums = [-1, 0, 3, 5, 9, 12], target = 9
left = 0, right = 5

第一步:

mid = (0 + 5) / 2 = 2
nums[mid] = 3 < 9
left = mid + 1 = 3

第二步:

mid = (3 + 5) / 2 = 4
nums[mid] = 9 == 9
返回 4

小结

今天,我们介绍了二分查找算法及其实现方法。通过将查找范围逐步减半,二分查找能够在 O(log n) 的时间复杂度内高效地查找有序数组中的目标值。这种算法在处理有序数据时非常有用,广泛应用于各种编程问题中。

感谢大家的阅读!如果你有任何问题或建议,欢迎在评论区留言。让我们一起在算法的世界中不断学习和进步!

关键字:数据结构与算法-二分查找

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: