如何创建线性搜索算法比我的教科书提供的更容易

时间:2015-12-24 05:06:11

标签: c++ algorithm

我需要帮助。我正在阅读教授c ++的教科书并没有很好地教会学生线性搜索算法。因此,我尝试在不使用任何功能的情况下重新创建算法。问题是,我写的代码似乎有一些错误。请注意我使用的是Microsoft Visual Studios 2013 IDE。因此,任何人都可以告诉我我的代码有什么问题吗?这是我用英语写的算法。算法不会显示变量和数组定义,但源代码会显示。

P.S。这不是家庭作业。这只是为了好玩:) 附:由于某种原因,代码格式非常糟糕。

算法:

  1. 要求用户输入数字
  2. 创建for循环
  3. 在for循环中遍历数组中的每个元素并进行比较 它与用户输入的号码
  4. 如果数组中的元素与用户输入的数字相等,则显示一条消息,表明已找到该数据
  5. 如果数组中的元素与用户输入的数字不相等,则显示一条消息,表示已找到WASN' T。
  6. 代码:

    #include <iostream>
    
    using namespace std;
    
    int main()
    {
        // Create the array
        int array[6] = {1,2,3,4,5,6};
        int number;
    
        // Ask the user to enter a number
        cout << "Enter a number: ";
        cin >> number;
    
        // Create a for loop to traverse through each number in the array
        //to see if it equals the user inputted number
        for (int i = 0; i < 6; i++)
        {
            if (number == array[i])
            {
                cout << "Number Found: " << array[i] << endl;
            }
            else if (number != array[i])
            {
                cout << "Number Not Found!" << endl;
            }
        }
        return 0;
    }
    

    如果我输入3,则输出如下:

    Number Not Found!
    Number Not Found!
    Number Found: 3
    Number Not Found!
    Number Not Found!
    Number Not Found!
    

3 个答案:

答案 0 :(得分:1)

每次迭代的逻辑输出决策。但似乎你只能输出一次你的决定。

因此,出于这个原因,全局声明一个布尔变量,并将false设置为该值的值。

每次迭代检查都会找到它。如果找到,则将布尔值设置为TRUE。

for final output check global boolean value true或false和print output

答案 1 :(得分:0)

从循环内移除cout。使用标志,即如果找到数字,则将其设置为true,然后使用if将print语句写在外面。

int flag=0;
for(int i=0;i<6;i++){
    if(number==arr[i])
        flag=i+1;
}
if(flag) cout<<"found at position"<<flag;
else cout<<"Not found";
  

PS:购买更好的教科书

答案 2 :(得分:0)

更轻松,更有趣:

#include <iostream>
#include <vector>

using namespace std;

int main() {

    int number;
    vector<int> nums{1,2,3,4,5,6};

    cout << "Find a number: ";
    cin >> number;

    for_each(cbegin(nums), cend(nums),
                  [&](const int& x)
                  {
                      if(x == number)
                          cout << "found " << x << endl;
                      else
                          cout << "could not find " << endl;
                  });

}

但线性搜索的一个很好的起点是:

template<typename I, typename T>
I find (I first, I last, const T& val)
{
  while (first != last) {
    if (*first == val) return first;
    ++first;
  }
  return last;
}