二进制搜索C ++中的数组

时间:2016-01-19 20:32:12

标签: c++ arrays binary-search

我的二进制搜索一直返回零我不知道为什么。也许我错误地传递了我的论点?或者也许我没有回复它?我不太确定有什么问题,如果有人能解释我如何能够返回我想要的值而不是零谢谢。我的数组中充满了我没有包含我的代码部分的单词,因为它是由文件填充的。我没有输入第一个字,所以我不应该为零。我尝试了多个单词。

session.query(Product).join(Product.order) \
    .options(joinedload(Product.tags)).all()

q = session.query(Product).join(User.addresses) \
    .options(joinedload(Product.cases)).all()

1 个答案:

答案 0 :(得分:1)

问题是你在return position;循环中有while,但在任何if/else块中没有,所以它在第一次迭代后返回,即使它没有if。然后找到了搜索字符串。您应该在循环之后移动它,或者在找到匹配元素时设置position的{​​{1}}块中执行此操作。

另一个问题是while条件为真。您希望在first 等于last时保持循环。实际上,这也不是正确的条件,因为如果数组只有一个元素,firstlast将始终相等,并且在测试之前是否会停止它匹配。所以正确的测试是while (first <= last)

int binarySearch(string words[], int numElems, string word) 
{
    int first = 0,                 //first array element
    last = numElems - 1,            //last array element
    middle;                        //mid point of search

    while (first <= last)
    {
        middle = (first + last) / 2; //this finds the mid point
        if (words[middle] == word) {
            return middle;
        }
        else if (words[middle]> word) // if it's in the lower half
        {
            last = middle - 1;
        }
        else {
            first = middle + 1;                 //if it's in the upper half
        }
    }
    return -1;  // not found
}