检查一个项目是否存在于最多 1000000 个项目或更多的数组中的有效方法是什么

What is the efficient way to check if an item is present in an array with up to 1000000 items ore more

如果您想检查 int[] 数组中是否存在一个 int 值,最多包含 1000000 个项目,那么最有效的方法是什么并最大限度地减少 CPU 周期?

int[] values = {1, 2, 3, 4};
value = 4

我知道使用 for 循环或类似这样的东西:

values.Contains(value);
Array.Exists(values , i => i==value );
Array.IndexOf(values, value) != -1;

算法:

  1. 如果范围小于10个元素,迭代直到找到元素。

  2. 否则找到数组的中间元素并将其与您的值进行比较。

  3. 取决于比较结果 select 新范围(前半部分或后半部分)并递归 运行 步骤 1。

因为您的数组已排序,所以最好的方法是使用 BinarySearch 方法。

bool IsInArray(int[] values, int value)
{
    var index = Array.BinarySearch(values, value);
    return (index >= 0);
}

如果数组未排序,那么您列出的其他 3 个选项的执行结果可能完全相同,我只会使用 values.Contains(value);,因为这是最简单的选择。