黄金wind 2022-10-06 17:03 采纳率: 100%
浏览 15
已结题

数组进行二分查找法时部分数据无法被查找到

问题遇到的现象和发生背景

C语言
使用二分查找法时发现部分数字无法被找到

用代码块功能插入代码,请勿粘贴截图
#include<stdio.h>
int search(int key, int a[], int len);
int main() {
    int a[] = { 1,2,3,4,6,8,9,13,46,78,88,99,100 };
    int key;

    printf("请输入你要搜索的数字:");
    scanf_s("%d", &key);

    int r = search(key, a, sizeof(a) / sizeof(a[0]));
    printf("该数字排在第%d位。", r);


    return 0;
}
int search(int key, int a[], int len) {
    int left = 0;
    int right = len - 1;
    int ret = -1;
    
    while(left < right) {
        int mid = (left + right) / 2;
        if (a[mid] < key) {
            left = mid + 1;
        }
        else if(a[mid]>key) {
            right = mid -1;
        }
        else {
            ret = mid;
            break;
        }
    }
    return ret;
}

运行结果及报错

输入46和100时输出的结果都为-1

  • 写回答

3条回答 默认 最新

  • 快乐鹦鹉 2022-10-06 17:16
    关注

    while(left < right) {
    改为
    while(left <= right) {
    就可以了

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 10月17日
  • 已采纳回答 10月9日
  • 创建了问题 10月6日