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

How to Create a Linear Searching Algorithm easier than what my textbook provides

本文关键字:教科书 我的 更容易 搜索算法 一个 何创建 创建 线性      更新时间:2023-10-16

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

附言:这不是家庭作业。这只是为了好玩:)附言:由于某种原因,代码格式出现了故障。

算法:

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

代码:

#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!

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

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

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

对于最终输出,检查全局布尔值true或false,并打印输出

从循环内部移除cout。使用标志(如果找到数字,将其设置为true,然后使用if.在外部写入打印语句)

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";

附言:买一本更好的教科书

更简单、更有趣:

#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;
}