二进制搜索最接近的值 c#

Binary Search Closest Value c#

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

示例数组:(4, 6, 7, 8, 9) 搜索 5 结果 6、7.

每次我搜索不是我数组中的元素的东西时,它 returns 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;
    }

假设您要在循环外声明 "mid" 并且 return 它?而不是 -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;
}