c - 只有两次比较的迭代二分查找?

标签 c binary-search

调整迭代二进制搜索代码,使其只使用两次比较而不是三个(在 主 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));
}

最佳答案

提示:尝试将其中一个 if/else 语句移出循环。哪个 if/else 最有可能成为算法在语句之外仍然有效的候选者?

关于c - 只有两次比较的迭代二分查找?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49060796/

相关文章:

c++ - 将数据从 C 进程传递到 C++ 进程

c - 当我仅在source.h中定义每个指定变量一次时,为什么会出现“多重定义”错误?

c++ - 在 C 和 C++ 中调用函数时 EAX 寄存器的初始化差异

c++ - 如何计算bigmod(bigmod(a ^ n)-bigmod(b ^ m))?

c - 任何更强大的测试用例来检查代码

c - 向控制台应用程序添加帮助开关

c++ - 通过修改二进制搜索算法来改进它,使其在大量单词(单词列表)中搜索单词时工作得更快

c - 递归函数调用中的段错误(核心转储)

ios - iOS二进制搜索代码崩溃超过256个项目

c++ - 字符串的二进制搜索无法正常工作