仅进行两次比较的迭代二分搜索?

时间:2018-03-02 00:11:19

标签: c binary-search

调整迭代二进制搜索代码,使其仅使用两个比较而不是三个(in 主要的while循环)。 *注意:三个比较在while循环中,两个if语句 在循环中。

#include <stdio.h>

int ItBinarySearch(int arr[], int len, int target) {

    int first = 0;
    int last = len-1;

    while (first <= last){
        // Assert: array is sorted
        int mid = (first+last) / 2;

        if (target == arr[mid])
            return 1;

        if (target < arr[mid])
            last = mid-1;

        else first = mid+1;
    }
    return 0;
}

int main(void){
    int arr[6]={0,1,2,3,4,5};
    int len=sizeof(arr)/sizeof(arr[0]);
    int target = 4;
    printf("%d\n",ItBinarySearch(arr,len,target));
}

1 个答案:

答案 0 :(得分:0)

提示:尝试在循环外移动其中一个if / else语句。哪个if / else最可能是候选者,如果它在语句之外,算法仍然可以工作?