数据结构:线性搜索程序中的逻辑错误

时间:2013-09-18 08:36:21

标签: search data-structures

以下函数应该执行线性搜索。

int linsearch(T arr[],int size,T target)
{
    int begin;
    int loc;
    bool found;
    for(begin=0;begin<size&&target!=arr[begin];begin++);
    loc = begin;
    if(target==arr[loc])
        found = loc;
    else
        found = -1;
    return found;
}

然而,无论我搜索什么,我总是以1作为输出。当元素进入或离开数组时会发生这种情况。请帮忙。

1 个答案:

答案 0 :(得分:0)

bool found;
:
return found;

布尔值通常限制为true / false,通常以1/0的形式重复。将{0}中的非零值放入bool很有可能将其强制转换为1

如果要返回找到它的索引,您应该使用int

int found;

但是,即使您进行了更改,它也不起作用:

int linsearch(T arr[],int size,T target)
{
    int begin;
    int loc;
    int found;  // <<-- changed this
    for(begin=0;begin<size&&target!=arr[begin];begin++);
    loc = begin;
    if(target==arr[loc])
        found = loc;
    else
        found = -1;
    return found;
}

这是因为,如果您找不到该项目,begin(以及loc,因为您将其设置为begin)保留为size,因此您用arr[loc]重新检查数组的末尾。

你真的应该在循环之后立即检查正确的 ,例如(完全删除loc,因为它是不必要的):

if (begin == size)
    found = -1;
else
    found = begin;

在任何情况下,您的代码可能基本上更简洁:

int linsearch (T arr[], int size, T target)
{
    int loc;
    for (loc = 0; loc < size; loc++)
        if (target == arr[loc])
            return loc;
    return -1;
}