首页 > 解决方案 > 为什么这个错误看起来像它有一个模式?二分查找 C

问题描述

我目前正在学习如何在 C 中进行二进制搜索。它工作得“半好”。当我尝试搜索值 (3,4,17,26,38) 时,它会显示正确的索引编号。但是当我搜索 1 或 40 或 10 或 21 时,它返回 -1 (未找到),有人可以解释什么是错的吗?

#include<stdio.h>

int binarysearch(int arr[], int n, int data);

int main ()
{
  int arr[9] = {1, 3, 4, 10, 17, 21, 26, 38, 40};
  int n = sizeof(arr)/sizeof(arr[0]);
  int data = 1;

  printf("the data is located in index %d", binarysearch(arr, n, data));

  return 0;
}

int binarysearch(int arr[], int n, int data){
  int l = 0; 
  int r = n-1;

    while(l < r){
      int mid = (l + r)/2;
  
      if(data == arr[mid]){
        return mid;
      }
      else if(data > arr[mid]){
        l = mid + 1;
      }
      else {
        r = mid - 1;
      }
    }
    return -1;
}

标签: c

解决方案


它可能会发生,l == r并且arr[l] == data


推荐阅读