试图在c中递归二进制搜索字符串

时间:2014-06-19 21:23:25

标签: c string recursion binary-search

我需要使用二进制搜索来递归查找目标字符串。如果找不到该函数,则返回-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 菲尔 苏珊

1 个答案:

答案 0 :(得分:0)

尽管二进制搜索很难做到,但我没有看到您的算法中出现任何错误,如图所示。由于各种原因无法根据提供的信息确定,您仍然可能失败(-1)。

1)您的源字符串列表实际上没有正确排序 - strcmp()使用ASCII比较,而不是字典比较,即您的源字符串必须经过ASCII排序才能使bsearch有效。

2)你的源字符串格式不正确NUL终止了C字符串。

3)目标字符串在源字符串列表中没有完全匹配。即搜索&#34; bill&#34;不会匹配&#34;比尔&#34;或&#34; billiard&#34;

只是注意,递归bsearch比非递归解决方案慢并且使用更多内存