【发布时间】:2012-03-14 16:52:37
【问题描述】:
我目前正在尝试使用二进制搜索,如果它没有找到任何东西,我不希望它返回 -1 我只是希望它返回下一个最佳解决方案给我的目标。现在由于一些奇怪的原因,我的 if 语句没有被捕获,我不知道为什么。我唯一想到的可能是范围?但我不完全确定它是否只是函数在 c 中的工作方式,我忘记了一个小细节。
int binary_search(int list[][4], int bottom, int top, int hit)
{
printf("bottom: %d top %d \n", bottom,top);
if (bottom > top)
{
if (list[top][0]<= hit && list[top][1] >= hit)
return top;
else if (list[bottom][0] <= hit && list[bottom][1] >= hit)
return bottom;
}
int middle = (top+bottom)/2;
if (hit < list[middle][0])
return binary_search(list, bottom, middle-1, hit);
else if (hit > list[middle][0])
return binary_search(list, middle+1, top, hit);
else if (hit == list[middle][0])
return middle;
}
【问题讨论】:
-
return = top?这甚至不会编译,“循环”是指“递归”吗?这是我在这里看到的唯一重复行为...... -
下一个最佳解决方案是什么意思?函数名肯定是在搜索
-
我在返回部分犯了一个错误,但是当我取出相等时它仍然给我带来麻烦,对于错过的类型感到抱歉。
-
@Ed 我最初搜索的是一系列日期目标我例如寻找第 8 天:[1] 开始 1 结束 2 [2] 开始 10 结束 12
-
编写你的函数,如果它找不到元素,则返回 -1。一旦你让它正常工作,然后考虑如何修改返回 -1 的“未找到”基本情况,以便它返回最接近的答案。