考虑下面给出的 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)即使列表A中存在x,它也会返回-1。答案:(乙)
解释:
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
这个问题的测验