【发布时间】:2019-05-02 13:39:23
【问题描述】:
我想在这样的数组中获取 (8) 的所有位置:(3,5,6,7,8,8,9,33,34,45)。但是我的代码只返回一个位置而忘记了第二个位置:
这是我的二进制搜索代码:
private static int BinarySearch(int[] array, int item)
{
int left = 0;
int right = array.Length - 1;
while (left <= right)
{
var middle = (left + right) / 2;
if (array[middle] == item)
return middle;
if (item < array[middle])
right = middle - 1;
else
left = middle + 1;
}
return -1;
}
【问题讨论】:
-
您返回的是
int。这只是一个位置。您可能需要更改代码以返回数组:int[] -
也许你可以用
Yield做一些花哨的事情 -
@ikerbera 这将是不必要的 - 因为它是二进制搜索,我们可以假设数据已排序......所以我们真正需要的是一个索引/计数对;注意:无论如何,现有代码实际上是错误的......当找到一个匹配时,它应该做两件事:向后走找到 first 匹配,并向前走找到最后一个/count
-
在
return middle;的位置,您应该搜索before 和aftermiddle的所有匹配值。这可能是线性搜索以保持简单,或者如果您期望可能有很多匹配值,它可能是二进制的。 -
为什么答案被删除了?其中至少有一个有效。
标签: c# binary-search