我正在尝试二进制搜索数组结构中的字符串。我不断得到分段错误或无限循环。我想知道我做错了什么。
int binsearch(struct person d[25], int low_int, int high_int, char search[15])
{
int mid_int;
printf(".");
mid_int = ((high_int - low_int)/2);
mid_int = mid_int + low_int;
if(strcmp(search, d[mid_int].name) == 0)
return mid_int;
if(low_int > high_int)
return -1;
else if(strcmp(search, d[mid_int].name) > 0)
{
binsearch(d, mid_int+1, high_int, search);
}
else
{
binsearch(d, low_int, mid_int-1, search);
}
}
每当我添加“mid_int = mid_int + low_int”时,它就会给我一个直线分段错误。当我拿走它时,它会进行无限循环打印“.....”然后导致分段错误(这些时间段显示搜索需要多少循环)。
答案 0 :(得分:2)
首先,如果您希望从中获取任何结果,则必须在递归return
调用中使用binsearch()
关键字。
然后在访问struct数组之前进行if if(low_int > high_int)
检查,这样就不会访问超出范围的元素。
假设您使用有效参数调用该函数,代码应该可以正常工作。
binsearch( d , 0 , d_size-1 , "Search" ) ;
请注意函数定义:
int binsearch(struct person d[25], int low_int, int high_int, char search[15])
相当于
int binsearch(struct person d[], int low_int, int high_int, char search[])
在这种情况下,那些尺寸25和15不做任何事情。您必须传递数组的大小。这已由low_int
处理,high_int
d
已处理search
,因为它是字符串,所以{{1}}应该为空终止。