我的二进制搜索一直返回零我不知道为什么。也许我错误地传递了我的论点?或者也许我没有回复它?我不太确定有什么问题,如果有人能解释我如何能够返回我想要的值而不是零谢谢。我的数组中充满了我没有包含我的代码部分的单词,因为它是由文件填充的。我没有输入第一个字,所以我不应该为零。我尝试了多个单词。
session.query(Product).join(Product.order) \
.options(joinedload(Product.tags)).all()
q = session.query(Product).join(User.addresses) \
.options(joinedload(Product.cases)).all()
答案 0 :(得分:1)
问题是你在return position;
循环中有while
,但在任何if/else
块中没有,所以它在第一次迭代后返回,即使它没有if
。然后找到了搜索字符串。您应该在循环之后移动它,或者在找到匹配元素时设置position
的{{1}}块中执行此操作。
另一个问题是while
条件为真。您希望在first
不等于last
时保持循环。实际上,这也不是正确的条件,因为如果数组只有一个元素,first
和last
将始终相等,并且在测试之前是否会停止它匹配。所以正确的测试是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
}