【发布时间】:2020-10-06 05:01:38
【问题描述】:
我正在研究二进制搜索算法以准备我的编码面试,但是我的算法仅适用于最佳情况,即当搜索的数据处于中点时,O(1)。当我将值更改为更坏的情况时,光标卡住了,比如第一个位置。
我知道二进制搜索有一个 O(log n) 更坏的情况,所以它不应该花很长时间。我做错了吗?
#include <stdio.h>
int binary_search(int arr[], int left, int right, int data){
// condition that runs only if true
while(left <= right){
int mid = (left + right) / 2;
if(data == arr[mid]){
return mid;
}
if(data > arr[mid]){
binary_search(arr, mid+1, right, data);
}
binary_search(arr, left, mid-1, data);
}
return -1;
}
void main(){
int arr[] = {1,2,3,4,5,6,7,8,9};
int result = binary_search(arr, 0, (sizeof(arr)/sizeof(arr[0]) - 1), 2);
(result == -1) ? printf("There was no record found\n") : printf("Your record was found at position %d\n", result+1);
}
【问题讨论】:
-
你应该返回递归调用的返回值。
-
模糊的观察:递归很少是做某事的最快方法,即使做得正确。
main()必须返回int -
@RobertHarvey 问题标题是“我在 C 二进制搜索代码中做错了什么?”
-
不,问题是“当我将值更改为更坏的情况时,光标卡住了,比如第一个位置。”
-
@Vik 有趣的是,面试的职位是什么?:) 项目经理的职位?
标签: c arrays algorithm binary-search function-definition