📜  门| GATE CS 1996 |第66章

📅  最后修改于: 2021-07-02 15:40:56             🧑  作者: Mango

考虑下面的程序,该程序尝试使用二进制搜索在排序数组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。因此,条件永远不会变为假。
这个问题的测验