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

我的二分查找代码无法定位数组首尾元素,求问题排查

你的二分查找代码问题分析与修复

核心错误点

  • 二分查找分支逻辑完全写反:
    当num[mid] < key时,目标元素应在右半区间(mid+1到r),但你错误递归到左半区间(l到mid-1),导致右侧元素永远无法被搜索到;反之,num[mid] > key时目标在左半区间,你却递归到右半区间,左侧元素也搜不到。
  • 缺失递归终止条件:
    未判断l > r的情况(即搜索区间耗尽仍未找到目标),导致Element not found的提示永远不会执行。
  • 不必要的未定义行为:
    fflush(stdin)是C标准未定义的操作,输入流无需使用该语句,会引发潜在问题。

修复后的完整代码

#include<stdio.h>
#define max 50

void binarysearch(int l,int r,int key,int num[])
{
    // 先判断终止条件:区间耗尽,未找到元素
    if(l > r)
    {
        printf("Element not found");
        return;
    }
    int mid = (l + r) / 2;
    if(num[mid] == key)
    {
        printf("Element found at location %d", mid + 1);
        return;
    }
    else if(num[mid] < key)
    {
        // 目标在右半区间,递归搜索mid+1到r
        binarysearch(mid + 1, r, key, num);
    }
    else
    {
        // 目标在左半区间,递归搜索l到mid-1
        binarysearch(l, mid - 1, key, num);
    }
}

int main()
{
    int i, key, size, num[max];
    printf("Enter size of array : ");
    scanf("%d", &size);
    for(i=0; i<size; i++)
    {
        printf("Enter the element : ");
        scanf("%d", &num[i]);
    }
    printf("Enter key to search : ");
    scanf("%d", &key);
    binarysearch(0, size-1, key, num);
    return 0;
}

额外注意

二分查找的前提是数组必须为升序排列,如果输入数组无序,即使修复代码也可能无法找到目标元素,请确保输入时数组是有序的。

内容的提问来源于stack exchange,提问作者Stew

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 16:20:43