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

C语言二分查找仅数组第4索引元素匹配成功其余返回-1问题咨询

C语言二分查找程序异常修复方案

核心问题

二分查找算法的生效前提是待查找数组必须为升序或降序有序排列,你当前代码中定义的数组为:
int A[] = {3,23,26,51,72,77,42,64};
数组前6个元素为升序,但索引6的42、索引7的64均小于前一位的77,属于无序序列,因此二分查找的区间收缩逻辑会完全失效,仅能刚好命中查找路径上的元素(也就是你提到的索引4对应的72),其余元素无法被正确检索。

修复步骤

  • 方案1:直接将数组调整为升序排列,适合数组固定不需要动态修改的场景
    修正后的数组定义为:int A[] = {3,23,26,42,51,64,72,77};
  • 方案2:如果数组需要动态生成,在调用Binary_search函数前,先调用C标准库的qsort函数对数组做升序排序,再执行查找。

修正后完整可运行代码

#include<stdio.h>

int Binary_search(int A[],int n,int x)
{
    int start=0,end = n-1;
    while(start<=end)
    {
        int mid = (start+end)/2;
        if(x == A[mid])return mid;
        else if(x < A[mid]) end = mid-1; 
        else start = mid+1;
    }
    return -1;
}

int main()
{
    // 修正为升序排列的数组
    int A[] = {3,23,26,42,51,64,72,77};
    puts("Enter the element ");
    int x; scanf("%d",&x);
    int len = sizeof(A)/sizeof(A[0]);
    int index = Binary_search(A,len,x);
    if(index != -1) printf("Number %i is at index %i",x,index);
    else printf("It's not in the array");
    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.13 16:00:02