思路
采用非递归方法实现
共四种情况:
- X<Mid,舍弃右半边,缩小查找范围
- X>Mid,舍弃左半边,缩小查找范围
- X=Mid,返回Mid
- X不存在,返回NotFound
“缩小查找范围”理解为“调整左右边界”
利用while循环实现,直到X=Mid或范围内无元素
代码
Position BinarySearch( List L, ElementType X )
{
Position Left, Right, Mid;
Left = 1;
Right = L->Last;
while (Left <= Right)
{
Mid = (Left + Right) / 2;
if (X == L->Data[Mid])
return Mid;
else if (X > L->Data[Mid])
Left = Mid + 1;
else if (X < L->Data[Mid])
Right = Mid -1;
}
return NotFound;
}
思考题
若Right = Mid - 1
改为Right = Mid
,则当范围内无元素时,此时Left = Right
始终成立,程序进入死循环。
注意事项
记得使用L->Data[Mid]
,别只写个Mid