【问题标题】:Binary Search Closest Value c#二进制搜索最接近值 c#
【发布时间】: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&lt;T&gt;.BinarySearch)的BinarySearch 实现吗?它不会立即告诉您哪个是更接近的项目,只是它介于哪两个项目之间,但使用该返回值来找到离您最近的项目会很容易。
  • 如果我可以更改返回类型来帮助我解决问题,那就太好了。我需要做什么才能找到最接近的元素?

标签: c# arrays binary-search


【解决方案1】:

假设您将在循环外声明“mid”并返回它?而不是 -1 ?

当您的数组已排序且未找到搜索值时,您将获得一个中间结果,该结果指向最接近您的搜索值的数组中的较低值。搜索值上方的元素包含在 a[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;
}

【讨论】:

  • 这很棒,它揭示了元素在数组中的位置,所以我可以从中计算出更高和更低。但是我将如何显示该元素不在数组中?因为搜索只是找到最接近的元素并显示索引。谢谢(对不起,我对 c# 还很陌生)
  • 你确实可以访问你的数组,所以之后测试 if (a[index]==item)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-10-19
  • 2019-11-17
  • 1970-01-01
  • 2021-12-30
  • 2014-07-04
  • 2014-07-10
  • 2021-12-28
相关资源
最近更新 更多