我意识到当我在我的布尔搜索中包含“else return false”时,它将永远无法“找到针头”。相反,如果我要删除该部分,该程序工作正常。它能够找到2008而不是2013年。任何想法为什么会如此?
/**
* helpers.c
*
* Computer Science 50
* Problem Set 3
*
* Helper functions for Problem Set 3.
*/
#include <cs50.h>
#include "helpers.h"
/**
* Returns true if value is in array of n values, else false.
*/
//value = needle , values[] = haystack, n = size
bool search(int value, int values[], int n)
{
// TODO: implement a searching algorithm
if(n<0)
return false;
for(int i=0;i<n;i++)
{
if(value == values[i])
{
return true;
}
else
{
return false;
}
}
return false;
}
/**
* Sorts array of n values.
*/
void sort(int values[], int n)
{
// TODO: implement an O(n^2) sorting algorithm
return;
}
答案 0 :(得分:2)
仔细查看代码:
for(int i=0;i<n;i++)
{
if(value == values[i])
{
return true;
}
else
{
return false;
}
}
循环体总是从函数返回 - 因此它只运行一次(假设为n > 0
)。这与测试value
是否位于大海捞针的第一个位置相同。
如果取出else
分支,循环体中的代码仅在找到值时返回。如果找不到它,它将检查下一个元素,然后检查下一个元素等,直到找到它或者你的元素用完为止。
答案 1 :(得分:0)
我认为你应该先实现排序功能。没有排序,搜索将无法运行。如果你尝试上面的代码,针说1,你开始时只有1,如果haystack,它将返回true。但如果你在大海捞针的第二个中加1,即使你正在寻找1,它也会返回假。