什么是最快的数组搜索方法
本文关键字:数组 搜索 方法 什么 | 更新日期: 2023-09-27 18:18:48
我有长度为 1000^2 的数组类。
数组包含 10-1000 之间的数字。
获取 200-300 之间数组中所有数字的最快方法是什么?
获取 200-300 之间数组中所有数字的最快方法是什么?
最快的可能是 O(n(。
遍历数组中的所有元素,如果当前元素在所需范围内,请将其添加到结果列表中。
List<int> result = new List<int>();
for (var i = 0; i < yourOriginalArray.Length; i++)
{
if (yourOriginalArray[i] >= 200 && yourOriginalArray[i] <= 300)
{
result.Add(yourOriginalArray[i]);
}
}
或者,您可以使用 LINQ:
List<int> result = yourOriginalArray.Where(x => x >= 200 && x <= 300).ToList();
您可以使用
Enumerable.Where
方法,例如;
var array = array.Where(n => n <= 300 && n >= 200).ToList();
我认为如果你
要使用这个大小的数组,如果你先对它进行排序,然后使用算法binary_search你可以得到数组中前 200 个发生的索引和最后 300 个 happeinnig 的索引,然后返回元素之间。这将是检索元素的最快方法。
Array arr = Array.CreateInstance(typeof(int), 1000000);
Stopwatch time = new Stopwatch();
Random random = new Random();
for (int i = 0; i < arr.Length; i++)
{
arr.SetValue(random.Next(10, 1000), i);
}
List<int> loopFor = new List<int>();
time.Start();
for (int i = 0; i < arr.Length; i++)
{
int value = (int)arr.GetValue(i);
if (value >= 200 && value <= 300)
{
loopFor.Add(value);
}
}
time.Stop();
Console.WriteLine("Loop for: {0}", time.Elapsed);
time.Reset();
time.Start();
List<int> loopForeach = new List<int>();
foreach (int i in arr)
{
if (i >= 200 && i <= 300)
{
loopForeach.Add(i);
}
}
time.Stop();
Console.WriteLine("Loop foreach: {0}", time.Elapsed);
time.Reset();
time.Start();
int[] matchedItems = Array.FindAll((int[])arr, x => x >= 200 && x <= 300);
time.Stop();
Console.WriteLine("Array.FindAll: {0}", time.Elapsed);
Console.Read();
结果:循环时间:1102804毫秒循环:1086569毫秒Array.FindAll: 14 milisseconds (更好(