微软的BinarySearch
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依然落在插入点上。
证毕