尝试二进制搜索

时间:2015-04-21 07:57:05

标签: c binary-search

我正在尝试二进制搜索数组结构中的字符串。我不断得到分段错误或无限循环。我想知道我做错了什么。

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”时,它就会给我一个直线分段错误。当我拿走它时,它会进行无限循环打印“.....”然后导致分段错误(这些时间段显示搜索需要多少循环)。

1 个答案:

答案 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}}应该为空终止。