【发布时间】:2018-04-15 23:59:54
【问题描述】:
我正在使用这种二进制搜索算法来查找我的数组中的项目。我正在努力做到这一点,所以当我搜索一个未出现在数组中的值时,我的程序会告诉我,它还会显示最近的项目在哪里
示例数组:(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;
}
【问题讨论】:
-
请不要在此处链接图片,请将您的代码作为文本包含在问题中
-
已修复,抱歉,新功能
-
当你说“我的程序告诉我,它还揭示了最近的项目在哪里”时,你希望你的程序如何做到这一点?即如果函数返回最接近的项目所在的位置,而只需执行
Debug.WriteLine表示没有匹配项,您是否愿意将返回类型更改为可以携带两种信息的东西,或者您想要否定返回未找到的最近位置,而返回正位置? -
您知道.NET 已经有一个名为
Array.BinarySearch(还有List<T>.BinarySearch)的BinarySearch 实现吗?它不会立即告诉您哪个是更接近的项目,只是它介于哪两个项目之间,但使用该返回值来找到离您最近的项目会很容易。 -
如果我可以更改返回类型来帮助我解决问题,那就太好了。我需要做什么才能找到最接近的元素?
标签: c# arrays binary-search