by.Qin3Yu
本文需要读者掌握 顺序表 的操作基础,完整代码将在文章末尾展示。
顺序表相关操作可以参考我的往期博文:
【C++数据结构 | 顺序表速通】使用顺序表完成简单的成绩管理系统.by.Qin3Yu
文中所有代码使用 C++ 举例,且默认已使用部分头文件和 std 命名空间:
#include
#include
using namespace std;
二分查找通常被使用于符合以下条件的以下场景:
- 数组或列表是 有序 的;
- 静态 数据结构;
- 数据量较 大 ;
- 只需要 快速确定 元素是否存在。
注意:在二分查找中,right 与 left 重合属于正常现象,表示搜索范围只有一个数字。
int main() {
vector<int> data = {1,7,9,11,14,19,20,26,29,30,31,44,45,52,59};
int target = 31;
int result = binarySearch(data, target);
}
int left = 0;
int right = arr.size() - 1;
while (left <= right) {
...
}
return -1;
int mid = left + (right - left) / 2;
if (arr[mid] == target) {
return mid; // 找到目标,返回索引
}
else if (arr[mid] < target) {
left = mid + 1; // 继续在右侧子数组中查找
}
在这里插入图片描述
else {
right = mid - 1; // 继续在左侧子数组中查找
}
#include
#include
using namespace std;
int binarySearch(const vector<int>& arr, int target) {
int left = 0;
int right = arr.size() - 1;
while (left <= right) {
int mid = left + (right - left) / 2; // 防止(left + right)出现溢出
if (arr[mid] == target) {
return mid; // 找到目标,返回索引
} else if (arr[mid] < target) {
left = mid + 1; // 继续在右侧子数组中查找
} else {
right = mid - 1; // 继续在左侧子数组中查找
}
}
return -1; // 没有找到目标,返回-1
}
int main() {
vector<int> data = {1,7,9,11,14,19,20,26,29,30,31,44,45,52,59};
int target = 31;
int result = binarySearch(data, target);
if (result != -1) {55
cout << "成功查找到对应值!" << result << endl;
} else {
cout << "找不到对应值。" << endl;
}
return 0;
}