如何修改二分查找代码以支持多目标值查找?
解决二分查找多目标值的问题
要让你的代码支持多个目标值的查找,只需对现有逻辑做几点简单调整:
- 定义目标值数组:把需要查找的多个值统一放到一个数组中。
- 循环处理每个目标:对每个目标值单独执行二分查找,每次查找前重置左右指针。
- 避免提前退出程序:找到单个目标后不要立即终止程序,而是输出结果后继续处理下一个目标。
以下是修改后的完整代码:
#include <stdio.h> int main() { int arr[] = {2, 3, 1, 5, 10, 4, 11, 15, 13}; int n = sizeof(arr) / sizeof(arr[0]); // 冒泡排序数组(二分查找要求数组有序) for (int i = 0; i < n; i++) { for (int j = i + 1; j < n; j++) { if (arr[i] > arr[j]) { int temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } } } // 定义需要查找的多个目标值 int targets[] = {10, 2, 5, 7}; int num_targets = sizeof(targets) / sizeof(targets[0]); // 遍历每个目标值进行查找 for (int k = 0; k < num_targets; k++) { int left = 0; int right = n - 1; int target = targets[k]; int found = 0; // 标记当前目标是否找到 while (left <= right) { int middle = (left + right) / 2; if (arr[middle] == target) { found = 1; break; // 找到后退出当前查找循环 } else if (arr[middle] < target) left = middle + 1; else right = middle - 1; } // 输出当前目标的查找结果 if (found) printf("目标值 %d 已找到\n", target); else printf("目标值 %d 未找到\n", target); } return 0; }
关键修改说明:
- 目标数组:用
targets数组存储所有需要查找的值,示例中包含了10、2、5以及额外测试值7。 - 独立查找循环:每个目标值的查找都是独立的,每次都重新初始化
left、right和found标记。 - 结果标记:用
found变量记录当前目标的查找状态,避免找到一个目标就直接终止程序。 - 清晰输出:打印结果时附带目标值,方便区分每个查找的结果。
如果需要从外部输入目标值(比如用户输入),也可以修改代码读取多个输入值存入targets数组后再执行查找逻辑。
内容的提问来源于stack exchange,提问作者Alif
相关产品推荐
相关产品推荐

