这是代码:

char binarySearch(unsigned int target, int* primes, unsigned int size){
    int* ptrToArray = primes;
    unsigned int first = 0;
    unsigned int last = size;

    while (first <= last){
        unsigned int middle = first + (last - first) / 2;
        printf("first: %d, last: %d, middle: %d\n", first, last , middle);

        if (ptrToArray[middle] == target){
            return 1;
        }

        if (ptrToArray[middle] < target){
            first = middle + 1;
        }else{
            last = middle - 1;
        }
    }
    return 0;
}

这是输出:

c - 二进制搜索访问超出范围的索引-LMLPHP

我一直盯着代码的和平超过一个应该,但仍然无法弄清楚缺陷在哪里。

最佳答案

如果 middle0 ,在调试输出接近尾声时,语句

last = middle - 1

导致整数溢出;必须对条件进行一些修改。

关于c - 二进制搜索访问超出范围的索引,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39286718/

10-11 18:52