c - 为什么这个错误看起来像它有一个模式?二分查找 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;
}
解决方案
它可能会发生,l == r
并且arr[l] == data
。
推荐阅读
- ios - Swift - SKCameraNode 在缩放和移动时抖动
- webstorm - 在没有 UI 的情况下快速重构所有变量
- javascript - 如何从 CRUD 应用程序中编辑和删除单个项目
- html - 所有屏幕尺寸的响应式 iFrame 高度
- intellij-idea - 使用 JetBrains IntelliJ IDEA 或其他工具的多语言项目
- c# - 尝试调用过程并传递参数获取错误
- jquery - 数据表布局问题 - 按钮和下拉菜单
- python - 将 json 导入 Postgres 时出现编码问题
- r - 使用 r 中的参数模型预测跟进时间
- typescript - 在 WebStorm 2018.2.5 中看不到 TypeScript 工具栏