我正在使用这种二进制搜索算法来查找数组中的项目。当我搜索一个没有出现在我的程序告诉我的数组中的值时,我正试图这样做,它也会显示最接近的项目在哪里
示例数组:(4,6,7,8,9) 搜索5 结果6,7。
每当我搜索不是我的数组中的元素的东西时,它返回0或-1。有人可以帮帮我吗,谢谢?
public static double BinarySearch(double[] a, double item)
{
int first = 0;
int last = a.Length - 1;
do
{
int mid = first + (last - first) / 2;
if (item > a[mid])
first = mid + 1;
else
last = mid - 1;
if (a[mid] == item)
return mid;
} while (first <= last);
return -1;
}
答案 0 :(得分:0)
假设您在循环外声明“mid”并返回它?而不是-1?
如果对数组进行排序并且未找到搜索到的值,则会得到一个中间结果,指向最接近搜索值的数组中的较低值。搜索值上方的元素包含在[mid + 1]中。小变化:
public static double BinarySearch(double[] a, double item)
{
int first = 0;
int last = a.Length - 1;
int mid = 0;
do
{
mid = first + (last - first) / 2;
if (item > a[mid])
first = mid + 1;
else
last = mid - 1;
if (a[mid] == item)
return mid;
} while (first <= last);
return mid;
}