【发布时间】:2013-02-03 16:15:58
【问题描述】:
int recurbinarysearch(int * oringalary, int low, int high, int target) {
if (low > high) {
return -1;
} else {
int mid = (low + high) / 2;
if (target == * (oringalary + mid)) return mid;
if (target > * (oringalary + mid)) return recurbinarysearch(oringalary, mid + 1, high, target);
if (target < * (oringalary + mid)) return recurbinarysearch(oringalary, low, mid - 1, target);
}
}
有人看到我的递归二分搜索算法有错误吗?偶尔它会返回一个不正确的索引(通常它会偏离一个),但偶尔会偏离。然而,通常它是正确的。我没有看到问题,希望得到帮助。
【问题讨论】:
-
您确定该数组已排序?
-
是的,几乎 100% 的数组都被打印出来了,而且似乎排序正确。
-
除法 (low + high)/2 是否可能存在某种累积舍入误差?
-
同样,如果找不到数字,则返回 0,而不是 -1..
-
我只想指出
* (oringalary + mid)是一种相当奇怪和丑陋的写oringalary[mid]的方式。