【发布时间】:2021-04-20 20:21:16
【问题描述】:
在this code 中,有一个二分搜索算法。为了表示未找到该项目,返回一个负数,在代码中使用return ~mid 完成(参见line 92)。
public int Search(string name)
{
int low = 0;
int high = _sortedPositions.Count - 1;
int mid = 0;
while (low <= high)
{
mid = (low + high) >> 1;
_stream.Position = _sortedPositions[mid];
var curName = _br.ReadString();
var comp = string.Compare(name, curName);
if (comp == 0)
return mid;
if (comp < 0)
high = mid - 1;
else
low = mid + 1;
}
return ~mid;
}
我的问题是:为什么会这样?返回一个固定的负整数有什么好处,比如return -1?
【问题讨论】:
-
如果您在特定问题上需要帮助,请在您的问题中发布所有相关代码;不是代码链接。
-
“与返回一个固定的负整数相比有什么优势吗?” - 这是一种方便的方式来报告所需元素不存在,同时还提供索引它会在哪里。参见例如docs.microsoft.com/en-us/dotnet/api/….
-
我正要回答你的问题,但它已关闭。答案是肯定的,有优势。如果您有记录 将 所在位置的按位补码,您可以使用
~撤消按位补码并找到您正在搜索的记录的插入索引,以防您需要添加您正在搜索的列表中的一条记录。 -
.NET 做同样的事情github.com/dotnet/corert/blob/…
-
请注意,这个函数有一个错误,所以它在很多情况下返回不正确的负值。有关详细信息,请参阅我的答案。
标签: c# bitwise-operators binary-search