
























private static int BinarySearch(T[] array, int index, int length, T value)
{
int lo = index;
int hi = index + length - 1;
while (lo <= hi)
{
int i = lo + ((hi - lo) >> 1);
int order;
if (array[i] == null)
{
order = (value == null) ? 0 : -1;
}
else
{
order = array[i].CompareTo(value);
}if (order == 0)
{
return i;
}if (order < 0)
{
lo = i + 1;
}
else
{
hi = i - 1;
}
}return ~lo;
}
最后一手~lo精妙。如果找不到value。当hi = lo + 1时。
1.如果value > lo。必然发生lo = lo + 1。~~lo落在插入点。
2.如果value < lo。必然发生lo。~~lo依然落在插入点上。
证毕
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。