You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改二分查找代码以支持多目标值查找?

解决二分查找多目标值的问题

要让你的代码支持多个目标值的查找,只需对现有逻辑做几点简单调整:

  1. 定义目标值数组:把需要查找的多个值统一放到一个数组中。
  2. 循环处理每个目标:对每个目标值单独执行二分查找,每次查找前重置左右指针。
  3. 避免提前退出程序:找到单个目标后不要立即终止程序,而是输出结果后继续处理下一个目标。

以下是修改后的完整代码:

#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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 01:05:22