我需要使用二进制搜索来递归查找目标字符串。如果找不到该函数,则返回-1,如果找到则返回正整数但总是返回-1。谢谢你的帮助!
int start = 0;
int search;
search = binary_search(strings, target, start, size-1);
if(search == -1)
{
printf("Not in the dataset!");
}
if(search != -1)
{
printf("%s is in the dataset", target);
}
int binary_search(char **strings, char *target, int start_idx, int end_idx)
{
if(end_idx < start_idx)
{
return -1;
}
int middle = ((start_idx + end_idx)/2);
int i;
i = strcmp(target, strings[middle]);
if(i == 0)
{
return middle;
}
if(i < 0)
{
return binary_search(strings, target, start_idx, middle-1);
}
else
{
return binary_search(strings, target, middle+1, end_idx);
}
}
输入数据: 亚丁 恺迪 大卫 埃里克 约翰 标记 亚光 mycah 菲尔 苏珊
答案 0 :(得分:0)
尽管二进制搜索很难做到,但我没有看到您的算法中出现任何错误,如图所示。由于各种原因无法根据提供的信息确定,您仍然可能失败(-1)。
1)您的源字符串列表实际上没有正确排序 - strcmp()使用ASCII比较,而不是字典比较,即您的源字符串必须经过ASCII排序才能使bsearch有效。
2)你的源字符串格式不正确NUL终止了C字符串。
3)目标字符串在源字符串列表中没有完全匹配。即搜索&#34; bill&#34;不会匹配&#34;比尔&#34;或&#34; billiard&#34;
只是注意,递归bsearch比非递归解决方案慢并且使用更多内存