【发布时间】:2019-04-23 14:21:05
【问题描述】:
我正在尝试在我的程序中实现二进制搜索算法,但它似乎不起作用。
这是我的代码:
public static void Search(float[] array, float key)
{
int min = 0;
int max = array.Length - 1;
int mid = 0;
do
{
mid = (min + max) / 2;
if (key > array[mid])
{
min = mid + 1;
}
if (key < array[mid])
{
max = mid - 1;
}
if (key == array[mid])
Console.WriteLine($"The item, {key} was found at index {mid} of the array");
} while (min <= max);
(我正在使用的数组已排序) 我只是得到一个空白控制台,它似乎永远找不到结果。 我该怎么做才能解决它?
谢谢
更新: 我已经从一个 txt 文件创建了 float[],如下所示:
float[] floats = (File.ReadAllLines(@"floats.txt")).Where(s => s != String.Empty).Select(s => float.Parse(s)).ToArray();
Here's the contents of floats.txt (link to pastebin)
这是用于测试算法是否有效的行:
Search(floats, -2.4439f);
(另外,我在尝试搜索之前对数组进行了排序)
【问题讨论】:
-
你的数组是什么样子的,关键是什么?数组中可能不存在键。
-
你的输入数组排序了吗?
-
比较浮点数可能很棘手,您确定确切的键在数组中,而不是非常接近的东西。代替 ==,您可以尝试诸如 Math.Abs(key - array[mid])
-
如果内置的
Array.BinarySearch(array, key)也找不到它,可能是浮点问题。
标签: c# binary-search