二分查找【入门】

已结束 ACM/ICPC 开始于: 2024-2-27 14:00 2308 小时 主持人: 6
                            <p node="[object Object]" dir="auto" style="margin-bottom:16px;color:#24292F;font-family:&quot;font-size:14px;text-wrap:wrap;background-color:rgba(0&#44;  0&#44;  0&#44;  0.05);margin-top:0px !important;">
二分查找算法(Binary Search Algorithm)是一种用于在有序数组中查找特定元素的高效算法。它的基本思想是通过比较目标值和数组中间元素的大小关系,从而缩小查找范围,直到找到目标值或确定目标值不存在为止。

算法步骤

  1. 将数组按照某种规则(通常是升序排列)排列。
  2. 设定初始搜索范围为整个数组。
  3. 每次取搜索范围的中间值,与目标值进行比较。
  4. 如果中间值等于目标值,则返回中间值的索引;如果中间值大于目标值,则在左半部分继续查找;如果中间值小于目标值,则在右半部分继续查找。
  5. 重复上述步骤,直到找到目标值或搜索范围缩小至空。

算法特点

  • 时间复杂度为O(log n),是一种高效的查找算法。
  • 适用于有序数组,不适用于链表等非随机访问结构。
  • 二分查找是一种迭代的算法,也可以使用递归实现。

示例

假设有一个有序数组arr = [1, 3, 5, 7, 9, 11, 13, 15, 17],要查找目标值为7。

  1. 初始搜索范围为整个数组,左指针left = 0,右指针right = 8。
  2. 计算中间索引mid = (0 + 8) / 2 = 4,对应元素arr[4] = 9,大于目标值7。
  3. 更新右指针为mid - 1,即right = 3,缩小搜索范围为左半部分。
  4. 继续查找,计算新的中间索引mid = (0 + 3) / 2 = 1,对应元素arr[1] = 3,小于目标值7。
  5. 更新左指针为mid + 1,即left = 2,缩小搜索范围为右半部分。
  6. 继续查找,计算新的中间索引mid = (2 + 3) / 2 = 2,对应元素arr[2] = 5,小于目标值7。
  7. 更新左指针为mid + 1,即left = 3,缩小搜索范围为右半部分。
  8. 继续查找,计算新的中间索引mid = (3 + 3) / 2 = 3,对应元素arr[3] = 7,与目标值相等,返回索引3。

通过以上步骤,二分查找算法成功在有序数组中找到目标值7的索引为3。

状态
已结束
规则
ACM/ICPC
题目
3
开始于
2024-2-27 14:00
结束于
2024-6-2 18:00
持续时间
2308 小时
主持人
参赛人数
6