线性搜索算法

时间:2014-12-16 01:38:03

标签: c++ arrays algorithm

我的程序的目标是找到用户在整数数组中输入的数字(数组是自动创建的),并显示该数字的索引(或数字,如果它们多次出现)。当所需数字在数组中只出现一次时,它可以正常工作。例如,如果有数组

7 8 0 4 2 7 2 

并且用户输入" 8",程序的输出将是

Index of the number you entered is: 2

但是当我们有阵列时:

0 5 3 9 3 7 2

用户输入" 3",输出

Index of the number you entered is: 3

我想知道如何使该计划包括第二个" 3"编号为5的程序代码:

#include <iostream>
#include <ctime>
#include <stdlib.h>

using namespace std;

int i, N;

int LinearSearch(int Array[], int searchValue)
{
    for (i=0; i<N; i++)
    {
        if (Array[i]==searchValue)
            return i;
    }
    return -1;
}

int main()
{
    int searchValue, Array[1000];

    cout<<"Size of array: ";
    cin>>N;

    cout<<"Array: ";
    for (i=0; i<N; i++)
    {
        Array[i]=rand()%10;
        cout<<Array[i]<<" ";
    }

    cout<<"Search value: ";
    cin>>searchValue;

    if (LinearSearch(Array, searchValue)==1)
        cout<<"\nIndex of the number you entered is: "<<LinearSearch(Array, searchValue)+1;
    else
        cout<<"\nNothing found";
}

2 个答案:

答案 0 :(得分:2)

您可以通过两种方式完成此操作: 1.将LinearSearch的返回值更改为vector,将其写为:

vector<int> LinearSearch(int Array[], int searchValue)

2.在参数中添加一个矢量引用变量,它应该是这样的:

int LinearSearch(int Array[], int searchValue, vector<int> &results)

LinearSearch中的方法体应该没有相应的变化。

答案 1 :(得分:0)

因为您在找到值后立即从搜索功能返回:

for (i=0; i<N; i++)
{
    if (Array[i]==searchValue)
        return i; // <-- as soon as we get here, we break the loop
}

因此,您将获得searchValue所在的第一个位置,即2(从0开始)。因此,你得到2 + 1 = 3.要得到最后一个,你必须删除提前退出,并将当前索引保存在变量中,如下所示:

int LinearSearch(int Array[], int searchValue) {
    int index = -1;

    for (i = 0; i < N; i++) {
        if (Array[i]==searchValue) {
            index = i;
        }
    }

    return index;
}