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
相关产品推荐
相关产品推荐

