考虑下面给出的C函数。假设数组listA包含n(> 0)个元素,它们以升序排序。
int ProcessArray(int *listA, int x, int n)
{
int i, j, k;
i = 0;
j = n-1;
do
{
k = (i+j)/2;
if (x <= listA[k])
j = k-1;
if (listA[k] <= x)
i = k+1;
}
while (i <= j);
if (listA[k] == x)
return(k);
else
return -1;
}
关于函数ProcessArray的以下哪一项陈述是正确的?
(A)当x不在listA中时,它将陷入无限循环。
(B)它是二进制搜索的实现。
(C)它将始终在listA中找到最大元素。
(D)即使x在listA中存在,它也会返回-1。答案: (B)
解释:
The function is iterative implementation of Binary Search.
k keeps track of current middle element.
i and j keep track of left and right corners
of current subarray
这个问题的测验