二进制搜索最近值c#

二进制搜索最近值c#,c#,arrays,binary-search,C#,Arrays,Binary Search,我使用这个二进制搜索算法来查找数组中的项。当我搜索程序告诉我的数组中没有出现的值时,我试图做到这一点,它还显示了最近的项目所在的位置 示例数组:(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 -

我使用这个二进制搜索算法来查找数组中的项。当我搜索程序告诉我的数组中没有出现的值时,我试图做到这一点,它还显示了最近的项目所在的位置

示例数组:(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;
    }
publicstaticdoublebinarysearch(double[]a,doubleitem)
{
int first=0;
int last=a.长度-1;
做
{
int mid=first+(last-first)/2;
如果(项目>a[mid])
第一个=中间+1;
其他的
last=mid-1;
如果(a[mid]==项目)
中途返回;
}while(首先假设您将在循环外声明“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;
}
publicstaticdoublebinarysearch(double[]a,doubleitem)
{
int first=0;
int last=a.长度-1;
int-mid=0;
做
{
中间=第一个+(最后一个-第一个)/2;
如果(项目>a[mid])
第一个=中间+1;
其他的
last=mid-1;
如果(a[mid]==项目)
中途返回;

}while(首先请不要在此处链接图像,请在问题中以文本形式包含您的代码修复,抱歉,这是新问题)当您说“我的程序告诉我,它还显示最近的项目在哪里”,您希望您的程序如何执行此操作?也就是说,在只执行
调试时,函数是否应返回最近项所在的位置。WriteLine
要说不存在匹配项,您是否愿意将返回类型更改为可以携带两个信息位的类型,还是希望返回最近项所在位置的负数未找到,而正位置返回到它所在的位置?您是否知道.NET已经有一个名为
Array.BinarySearch
(以及
List.BinarySearch
)的BinarySearch实现?它不会立即告诉您哪个是最接近的项目,只会告诉您它介于哪两个项目之间,但使用该返回值查找最接近的项目将非常容易。如果我可以更改返回类型以帮助解决我的问题,那就太好了。我需要做些什么来查找最接近的元素?这很好,它显示了位置关于元素在数组中的位置,因此我可以从中计算出更高和更低的位置。但是我如何显示元素不在数组中?因为搜索只会找到最近的元素并显示索引。谢谢(抱歉,我对c#还比较陌生)您确实有权访问数组,所以请稍后测试(a[index]==item)。