【补】搜索
在这里,汇集了搜索算法,包括线性查找、二分查找等。 线性查找(Linear Search) 代码实现 #include <iostream> using namespace std; int main() { int nums[10]; for (int i = 0; i < 10; i++) { nums[i] = i + 1; // 初始化数组,1~10 } int find; cin >> find; // 线性查找 for (int i = 0; i < 10; i++) { if (nums[i] == find) { cout << i; // 输出找到的索引 return 0; } } cout << "Not found"; // 没找到 } 算法解析 这是最基本的查找算法,也是最简单的一种。 遍历数组 for (int i = 0; i < 10; i++),依次检查 nums[i] 判断是否匹配 if (nums[i] == find),如果找到目标值,就输出索引 i 提前返回 return 0; 避免多余的遍历,提高效率 未找到时输出 “Not found” 遍历结束仍然没找到目标值,则打印 “Not found” 时间复杂度为 O(n),适用于无序数组,或小规模数据 二分查找(Binary Search) 代码实现 #include<iostream> using namespace std; int main() { int nums[10]; for (int i = 0; i <= 9; i++) { nums[i] = i + 1; } int find = 0; // 要查找的元素 int left = 0, right = 9; // 元素下标 int mid = 0; // 元素下标 cin >> find; while (left <= right) { mid = (left + right) / 2; if (nums[mid] > find) { // 要找的元素在中点左边 right = mid - 1; continue; } if (nums[mid] < find) { //要找的元素在中点左边 left = mid + 1; continue; } if (nums[mid] == find) { cout << mid; return 0; } } cout << "Not found"; } 算法解析 初始化 nums 数组被初始化为 {1, 2, 3, …, 10},即 升序排列。 left = 0, right = 9,分别表示搜索范围的 左端 和 右端。 mid = (left + right) / 2,计算当前范围的 中间元素。 查找过程 如果 nums[mid] > find,说明目标在 左半部分,所以更新 right = mid - 1。 如果 nums[mid] < find,说明目标在 右半部分,所以更新 left = mid + 1。 如果 nums[mid] == find,找到目标,输出索引并终止程序。 终止条件 找到目标时,输出其索引并返回。 若 left > right,表示搜索范围为空,目标元素不存在,输出 “Not found”。 时间复杂度 二分查找的时间复杂度是 O(log N),原因是: ...