二分查找:定义一个整数X,和整数A(0),A(1),A(2),......A(N-1),后者已经预先排序并在内存中,求使得Ai=X的下标i,如果X不存在,则返回-1。
策略:验证X是否是居中的,如果是,则答案找到。如果X小于居中元素,应用同样的策略于居中元素左边已排序的子序列;同理,如果大于居中元素,那么就检查数据的右半部分。
二分查找的非递归实现(复杂度O(logN))
int BinarySearch(ElementType a[], ElementType x, int N){
int Low, Mid, High;
Low = 0;
High = N - 1;
while(Low <= High)
{
Mid = (Low + High) / 2;
if (a[Mid] < x)
Low = Mid + 1;
else if (a[Mid] > x)
High = Mid -1;
else
return Mid;
}
return notFound;
}
二分查找的递归实现(复杂度O(logN))
int BinarySearch(const ElementType a[], ElementType data, int Low, int High)
{
int mid = (Low + High) / 2;
if (data == a[mid])
{
return mid;
}
else if (data < a[mid])
{
return BinarySearch(a, data, Low, mid - 1);
}
else if (data > a[mid])
{
return BinarySearch(a, data, mid + 1, High);
}
else
{
return notFound;
}
}