二进制搜索最接近的值 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;
}
我正在使用这个二进制搜索算法来查找我的数组中的项目。我试图做到这一点,所以当我搜索一个没有出现在我的程序告诉我的数组中的值时,它还会显示最近的项目在哪里
示例数组:(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;
}