考虑下面的程序,该程序尝试使用二进制搜索在排序数组a []中定位元素x。假设N> 1 。该程序是错误的。在什么情况下程序会失败?
var i,j,k: integer; x: integer;
a: array; [1....N] of integer;
begin i:= 1; j:= N;
repeat
k:(i+j) div 2;
if a[k] < x then i:= k
else j:= k
until (a[k] = x) or (i >= j);
if (a[k] = x) then
writeln ('x is in the array')
else
writeln ('x is not in the array')
end;
(A) x是数组a []的最后一个元素
(B) x大于数组a []的所有元素
(C)以上两者
(D) x小于数组a []的最后一个元素答案: (C)
说明:对于要搜索的元素是a []的最后一个元素或大于a []中的最后一个元素(或最大元素)的情况,上述程序不起作用。在这种情况下,程序会陷入无限循环,因为在所有迭代中都将i赋值为k,并且i永远不会等于或大于j。因此,条件永远不会变为假。
这个问题的测验