二进制搜索最近值c#

时间:2018-04-15 15:37:19

标签: 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 - 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;
    }

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;
}