C++实现图书馆书籍二分查找程序及开发建议
### 🔍解题思路 二分查找是一种在有序数组中查找特定元素的高效算法。它的基本思想是将数组分成两部分,然后根据目标值与中间元素的大小关系,决定在左半部分还是右半部分继续查找,直到找到目标值或者确定目标值不存在。 ### 💻代码实现 ```cpp #include <iostream> #include <vector> using namespace std; // 二分查找函数 int binarySearch(const vector<int>& arr, int target) { int left = 0, right = arr.size() - 1; while (left <= right) { int mid = left + (right - left) / 2; if (arr[mid] == target) { return mid + 1; // 找到目标值,返回位置(从1开始) } else if (arr[mid] < target) { left = mid + 1; // 目标值在右半部分 } else { right = mid - 1; // 目标值在左半部分 } } return arr.size() + 1; // 未找到目标值,返回n+1 } int main() { int n, m; cin >> n >> m; vector<int> books(n); for (int i = 0; i < n; ++i) { cin >> books[i]; } for (int i = 0; i < m; ++i) { int target; cin >> target; cout << binarySearch(books, target) << endl; } return 0; } ``` ### 📋代码解释 1. **二分查找函数 `binarySearch`**: - 接收一个有序数组 `arr` 和目标值 `target` 作为参数。 - 使用 `left` 和 `right` 指针分别指向数组的起始和结束位置。 - 在 `left <= right` 的条件下,计算中间位置 `mid`。 - 如果 `arr[mid]` 等于 `target`,则返回 `mid + 1`(因为位置从1开始)。 - 如果 `arr[mid]` 小于 `target`,则更新 `left = mid + 1`,在右半部分继续查找。 - 如果 `arr[mid]` 大于 `target`,则更新 `right = mid - 1`,在左半部分继续查找。 - 如果循环结束后仍未找到目标值,返回 `arr.size() + 1`。 2. **主函数 `main`**: - 读取 `n` 和 `m`,分别表示书籍数量和查找次数。 - 读取 `n` 本书的编号,存储在 `vector<int> books` 中。 - 循环 `m` 次,每次读取一个目标编号,调用 `binarySearch` 函数进行查找,并输出结果。 ### 🚀开发建议 - **边界条件处理**:确保在二分查找中正确处理边界条件,避免出现越界错误。 - **代码复用**:将二分查找函数封装成独立的函数,提高代码的复用性。 - **输入验证**:可以添加输入验证,确保输入的编号是合法的。 ### 📚学习资源 - [C++ 官方文档](https://en.cppreference.com/w/) - 《C++ Primer》 ######[AI写代码神器 | 793点数解答 | 2026-06-05 19:54:42]
- Python 实现球类:精准计算半径、表面积与体积,附输入验证与异常处理!(阿里通义 | 261点数解答 | 2024-11-28 21:19:39)408
- 51 单片机:定时器 0 实现 8 个 LED 循环点亮,附代码及优化建议(字节豆包 | 1193点数解答 | 2024-12-27 15:10:29)371
- C++实现计算字符矩阵中十字图形个数(字节豆包 | 333点数解答 | 2026-03-14 19:46:38)61
- C++实现矩阵中十字图形个数的计算(字节豆包 | 847点数解答 | 2026-03-14 20:19:15)61
- C++计算字符矩阵中十字图形个数的实现与开发建议(字节豆包 | 720点数解答 | 2026-04-10 19:42:04)47
- C++程序:计算字符矩阵中'#'构成的十字图形个数(字节豆包 | 425点数解答 | 2026-04-24 19:19:07)48
- C++程序:计算字符矩阵中'#'构成的十字图形个数(字节豆包 | 354点数解答 | 2026-05-09 19:13:12)25
- 字符矩阵中十字图形个数的计算程序(字节豆包 | 541点数解答 | 2026-05-09 19:14:47)28
- C++ 实现计算字符矩阵中十字图形个数(字节豆包 | 591点数解答 | 2026-05-10 15:47:30)26
- Linux开发:用find命令查找/usr目录下超1MB的文件(百度文心 | 153点数解答 | 2023-11-09 18:45:10)226
- 8 个实用命令,助 Linux 开发者轻松查找服务器平均负载!(百度文心 | 311点数解答 | 2023-11-09 18:47:10)246
- C++实现顺序存储结构基本操作:初始化、插入、删除等全解析(GPT | 1743点数解答 | 2024-09-26 00:20:17)304