📜  门| GATE-CS-2014-(Set-3)|第65章

📅  最后修改于: 2021-06-28 20:23:35             🧑  作者: Mango

考虑下面给出的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

这个问题的测验