二分查找的前提是数据已经预先排序,而然后通过不断地缩小查找范围的方式来查找数据,C#的实现如下:
internal static int InternalBinarySearch(T[] array, int index, int length, T value, IComparer<T> comparer)
{
int num1 = index;
int num2 = index + length - 1;
while (num1 <= num2)
{
int index1 = num1 + (num2 - num1 >> 1);
int num3 = comparer.Compare(array[index1], value);
if (num3 == 0)
return index1;
if (num3 < 0)
num1 = index1 + 1;
else
num2 = index1 - 1;
}
return ~num1;
}
首先确定3个查找点,即 起点,中点,终点。
1,如果中点即是目标值,那么返回中点的值,如果大于中点值,则把范围确定为中点+1到终点,如果小于中点值,则把范围确定为起点到中点-1。
2,如此不断地修改起点和终点的值,直至找到。
注意这里没有用递归的方式。