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

📅  最后修改于: 2021-09-25 04:36:48             🧑  作者: 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)即使列表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

这个问题的测验