我正在迭代地实现二进制搜索,我正在搜索数组中的数据。
#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中给出的最大值以上的任何数据时,我的代码失败了。 我正在使用代码块来编译和运行我的代码。
答案 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)