上限在二进制搜索中失败

时间:2015-01-18 06:25:03

标签: c

我正在迭代地实现二进制搜索,我正在搜索数组中的数据。

#include<stdio.h>
int main()
{
    int arr[10] = {2,3,4,5,6,7,8,9,10,11};
    int find = 12;
    int size = 10;
    int pos = 0;
    int mid;
    while(pos<=size)
    {
        mid = pos+(size-pos)/2;
        printf("mid = %d %d\n",mid,arr[mid]);

        if(arr[mid] == find){
            printf("mid = %d %d\n",mid,arr[mid]);
            return printf("position is %d\n",mid+1);
        }
        if(arr[mid]< find)
            pos = mid+1;
        else
            size = mid-1;
    }
    printf("data not found\n");

    return 0;
}

但是当我试图找到arr中给出的最大值以上的任何数据时,我的代码失败了。 我正在使用代码块来编译和运行我的代码。

2 个答案:

答案 0 :(得分:0)

数组从索引0开始,当你迭代时,迭代到n-1个元素。你的循环:

while(pos<=size)

应改为

while(pos<size)

所以它并没有超越你尚未定义的元素。

答案 1 :(得分:0)

问题是因为在搜索时没有正确指定数组绑定.Array以索引0开始。因此在你的情况下,arr [10]表示数组元素从arr [0]开始,最后一个元素是arr [9]。 size变量应设置为n-1,即10-1 = 9。 因此代码应该是

int size = 9;

或者,替代改变大小,您可以在循环时更改为

while(pos<size)