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

证毕

posted @ 2011-03-08 16:19 dragonpig 阅读(...) 评论(...) 编辑 收藏