【发布时间】:2011-05-17 09:44:47
【问题描述】:
我有一个大约 500,000 个整数的排序数组。目前,我通过获取目标 int 和所有元素之间的差异来选择正确的索引,然后使用 LINQ 按最小差异排序(非常低效)。
我希望能够用 BinarySearch 做一些非常相似的事情。
给定:
Pos Value
0 10
1 20
2 30
4 50
5 60
如果我想找到值 24 的最接近值,我希望返回的索引为 1。
给定:
int index = myArray.BinarySearch(values, 24);
if (index < 0)
index = ~index;
这将返回 2,因为它给出了行中的下一个元素,而不是最接近的。是否可以编写一个返回最近索引的 IComparer?
给定值:
Value ExpectedReturn
20 1
24 1
25 2
26 2
30 2
我正在尝试尽快完成此操作。到目前为止,我在 LINQ 中所做的一切都低于我认为通过出色的二进制搜索可以实现的目标。感谢您的意见。
【问题讨论】:
标签: c# optimization binary-search