C++ 实现二分法查找算法:高效搜索有序数组的秘籍
二分法查找(Binary Search)是一种在有序数组中查找特定元素的高效算法。其基本思想是将数组分成两部分,然后根据目标值与中间元素的大小关系,决定在左半部分还是右半部分继续查找,直到找到目标值或确定目标值不存在。 以下是用 C++ 实现二分法查找算法的代码: ```cpp #include <iostream> #include <vector> // 二分法查找函数 int binarySearch(const std::vector<int>& arr, int target) { int left = 0; int right = arr.size() - 1; while (left <= right) { // 计算中间元素的索引 int mid = left + (right - left) / 2; if (arr[mid] == target) { // 找到目标值,返回其索引 return mid; } else if (arr[mid] < target) { // 目标值在右半部分,更新左边界 left = mid + 1; } else { // 目标值在左半部分,更新右边界 right = mid - 1; } } // 未找到目标值,返回 -1 return -1; } int main() { // 有序数组 std::vector<int> arr = {1, 3, 5, 7, 9, 11, 13}; int target = 7; // 调用二分法查找函数 int result = binarySearch(arr, target); if (result != -1) { std::cout << "目标值 " << target << " 在数组中的索引是: " << result << std::endl; } else { std::cout << "目标值 " << target << " 不在数组中。" << std::endl; } return 0; } ``` 代码解释: 1. `binarySearch` 函数: - 接受一个有序数组 `arr` 和目标值 `target` 作为参数。 - 使用两个指针 `left` 和 `right` 分别指向数组的起始和结束位置。 - 在 `while` 循环中,计算中间元素的索引 `mid`。 - 如果中间元素等于目标值,返回其索引。 - 如果中间元素小于目标值,更新左边界 `left` 为 `mid + 1`。 - 如果中间元素大于目标值,更新右边界 `right` 为 `mid - 1`。 - 如果循环结束后仍未找到目标值,返回 -1。 2. `main` 函数: - 定义一个有序数组 `arr` 和目标值 `target`。 - 调用 `binarySearch` 函数进行查找。 - 根据返回结果输出相应的信息。 复杂度分析: - 时间复杂度:$O(log n)$,其中 $n$ 是数组的长度。每次查找都将搜索范围缩小一半。 - 空间复杂度:$O(1)$,只使用了常数级的额外空间。 ######[AI问答 | 716点数解答 | 2025-11-13 19:22:49]
- Python 实现球类:精准计算半径、表面积与体积,附输入验证与异常处理!(阿里通义 | 261点数解答 | 2024-11-28 21:19:39)350
- 巴黎奥运:中国女排淘汰赛对决土耳其,朱婷成致胜关键!(字节豆包 | 448点数解答 | 2024-08-06 15:59:48)167
- C++实现计算最少添加数字次数以匹配两个数组元素(字节豆包 | 714点数解答 | 2026-03-08 19:44:54)16
- 51 单片机:定时器 0 实现 8 个 LED 循环点亮,附代码及优化建议(字节豆包 | 1193点数解答 | 2024-12-27 15:10:29)322
- HTML+jQuery 实现列表元素悬停动画效果:代码详解与注意事项(字节豆包 | 475点数解答 | 2024-12-19 14:58:05)374
- HTML+jQuery:打造动态导航栏动画效果及注意事项(字节豆包 | 495点数解答 | 2024-12-19 14:58:06)321
- HTML+jQuery:打造带动态交互效果的商品展示页面(讯飞星火 | 497点数解答 | 2024-12-19 14:58:18)329
- HTML与jQuery结合:实现商品列表交互动画的首页代码解析(讯飞星火 | 497点数解答 | 2024-12-19 14:58:20)344
- Java 实现仿 Windows 资源管理器:文件管理器功能全解析与代码示例(字节豆包 | 623点数解答 | 2025-01-01 14:59:04)257
- 易语言:实现搜索通配符功能,解决搜索内容超255问题(字节豆包 | 32点数解答 | 2026-02-09 16:44:31)49
- 代码优化:“A_寻找通配符”子程序的改进之路(字节豆包 | 1248点数解答 | 2026-02-09 16:45:52)54
- 易语言:A_寻找通配符子程序完整实现及详细代码解读(字节豆包 | 1368点数解答 | 2026-02-09 16:49:12)49