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

证毕

你可能感兴趣的:(search)