无法理解C ++顺序搜索

时间:2013-02-19 02:48:20

标签: c++

我是C ++的新手,很难理解这个功能。有人可以带我走过吗?

int seqSearch(int [ ] list, int target)
{
    //precondition:  The list is in non-decreasing order
    //postcondition:  The method returns -1 if the target is not in the list.  If the target
    //is in the list, the method returns the index of the first occurrence of the target.
    int result = -1;
    boolean foundBigger = false;
    int i = 0;
    while (result == -1 && !foundBigger && i < list.length)
    {
        if (target == list[i])
            result = i;
        else if (list[i] > target)
            foundBigger = true;
        //endif
        i++;
    }  //endwhile
    return result;
}

5 个答案:

答案 0 :(得分:2)

它试图查找列表中是否存在目标号码,其中列表中的号码按降序存储。

循环继续,

  1. 直到找不到目标。 (条件:结果== -1) (如果找到了目标,那么结果!= -1并且循环中断,返回元素的索引。

  2. 或者直到列表中的元素大于目标。 (条件:!foundBigger) (由于列表按降序排列,如果它找到一个小于目标的数字,那么他们将无法在剩余列表中找到该数字。所以这意味着它不在列表中并且循环应该破裂。)

  3. 或者直到整个列表呈现并且找不到它。 (条件:i&lt; list.length)

  4. 希望现在明白。

答案 1 :(得分:1)

嗯,“非递减顺序”。一个更好的词是升序: - )

该函数假定列表按升序排列。从列表中的第一项开始(列表[0]),与您要查找的项目(即“目标”)进行比较。如果相等,则将结果设置为索引“i”。如果没有,增加i并继续循环。逐个浏览每个项目,直到:

(a)你找到“目标”,或者

(b)当前项目大于您的“目标”(此时退出,因为自您的列表被订购以来没有任何重点)

返回值是列表中您找到“target”的索引,如果找不到则返回-1。

答案 2 :(得分:0)

当结果是== -1和 foundBigger是真的 那么传递给函数的数组大小大于0

然后它进入while循环

如果上述标准中的一个没有完全填充那么它就不会进入循环内部它只会返回返回值

然后,如果使用target参数传递给函数的值等于数组列表的i值,则将结果赋值给i的值

如果目标值小于数组列表的i值,那么当你进入while循环时,findBigger被赋值为true,你就无法满足上述条件

如果以上都不起作用,那么我会增加1并且它会从while循环中出现

直到找到目标值保存在哪个位置,如果目标值不在数组中,那么它将返回结果-1

否则会返回位置

答案 3 :(得分:0)

// precondition:  The list is in non-decreasing order
// postcondition:  The method returns -1 if the target is not in the list.  If the target
// is in the list, the method returns the index of the first occurrence of the target.
int seqSearch(int [ ] list, int target)
{
    int result = -1;                                    // Set result to 'not-found' value
    // Also we want to stop search if smth bigger than `target' will be found
    // Remember the original list is assumed to be sorted, so first value
    // bigger than `target' means: no need to continue, it is guarantied that `target'
    // is nto here!
    boolean foundBigger = false;
    int i = 0;                                          // Initial index to start search
    // Repeat 'till `target' not found AND not found smth bigger that requested target
    // and current index less than the list size...
    while (result == -1 && !foundBigger && i < list.length)
    {
        if (target == list[i])                          // Is current item equal to the requested?
            result = i;                                 // Remember result index (this will break the loop)
        else if (list[i] > target)                      // Is current item bigger than the requsted?
            foundBigger = true;                         // Yep, will break the loop w/ no result to return
        //endif
        i++;                                            // move to next item in the list
    }  //endwhile
    return result;                                      // Return the result,  whatever it is
}

答案 4 :(得分:0)

如果这是工作代码,那么它的确定不是c ++。 while循环中的布尔操作必须用单独的括号括起来以便操作顺序,而c ++没有数组的.length属性(java允许这两个使得我用java编写的东西)。逻辑它背后仍然保持不变。

首先初始化你的结果int(要返回的结果)和一个检查你是否已经传递了你想要的元素的布尔值。只要你没有找到你想要的东西,你就没有“通过”你继续前进的目标物品。

如果找到了目标,那么结果int将更改为正确的索引,下次循环检查其条件时,索引将超过-1并表示实数,因此方法将结束并返回索引

第二个语句检查你是否已经传递了你正在寻找的int。你知道列表是顺序的,所以如果你当前所在的值高于你正在寻找的值并且你没有找到该项,那么你改变了findBigger布尔值,它将在下次检查条件时结束循环

如果没有满足这些条件,那么您最终将超过列表搜索的末尾,因此一旦到达列表末尾,您就知道该项目不在列表中,因此您仍然返回-1。