顺序搜索算法的麻烦

时间:2010-05-04 06:16:44

标签: c sequential

另外,为什么这会给我一个错误,因为我使用bool?

我需要使用这种顺序搜索算法,但我不确定如何。我需要将它与数组一起使用。有人可以指出我正确的方向或如何使用它。

bool seqSearch (int list[], int last, int target, int* locn){
     int looker;

     looker = 0;
     while(looker < last && target != list[looker]){
                  looker++;
     }

     *locn = looker;
     return(target == list[looker]);
}

4 个答案:

答案 0 :(得分:1)

有一些问题。

  1. 我会将姓氏改为大小。
  2. 如果找不到该值,您将取消引用无效的内存位置。
  3. 编辑:我猜最后是length - 1。这是一个不寻常的签名。所以这个电话是这样的:

    int list[CONSTANT];
    ...
    int foundIndex;
    bool found = seqSearch(list, sizeof(list)/sizeof(int), target, &foundIndex);
    

    有许多方法可以启用bool。一种是使用stdbool.h和C99。

答案 1 :(得分:1)

很明显

list[]是您要搜索的列表 lastlist中的最后一个索引 target是您在list搜索的内容 locn将包含找到target的索引 返回值是一个布尔值,表示是否找到了target

关于如何传递locn的问题,请执行类似

的操作
int locn; /* the locn where the index of target will be stored if found */

bool target_found = seqSearch(blah blah blah, &locn);

答案 2 :(得分:1)

您的代码存在的问题是,如果您搜索数组中不存在的元素,looker将等于last并且您尝试访问位置last处的数组元素这是无效的。

相反,你可以这样做:

bool seqSearch (int list[], int last, int target, int* locn) { 

    int looker;

    for(looker=0;looker<last;looker++) {

        // target found.
        if(list[looker] == target) {
            *locn = looker; // copy location.
            return true;    // return true.
        }
    }

    // target not found.
    *locn = -1;   // copy an invalid location.
    return false; // return false.
}

您可以按如下方式调用该函数:

int list[] = {5,4,3,2,1}; // the array to search in.
int size = sizeof(list)/sizeof(list[0]); // number of elements in the array.
int target = 3; // the key to search for.
int locn; // to hold the location of the key found..and -1 if not found.

if( seqSearch(list,size,target,&locn) ) {
  // target found in list at location locn.
} else {
  // target not found in list.
}

答案 3 :(得分:1)

看起来你就像这样使用它......

// I assume you've set an int list[], an int listlen and an int intToFind

int where;
bool found = seqSearch(list, listlen - 1, intToFind, &where);
if (found)
{
    // list[where] is the entry that was found; do something with it
}