C ++线性搜索算法

时间:2015-06-10 00:41:25

标签: c++

我正在尝试在c ++上创建线性搜索算法,但我的代码中的linearSearch函数遇到了一些问题。这是一个简单的for循环,我无法看到似乎是什么问题,我要求用户输入一个键,如果它是数组中的一个键,那么它应该给出正确的位置,但事实并非如此。谁能看到我在实施中出错的地方?

#include <iostream>
#include <ctime>
#include <cstdlib>
using namespace std;

int linearSearch(int arr[],int size, int key){
for(int i = 0; i < size; ++i){
    if(key == arr[i]){
        return i;
    }else{
        return -1;
    }
  }
}


int main() {
 const int size = 20;
 int numbers[size];
 srand((unsigned) time(0));
 for(int i = 0; i < size; ++i){
    numbers[i] = (rand() % 100) + 1;
    cout << numbers[i] << " ";
 }
 cout << endl;
 int key;
 cout << "Enter a key to search for: " << endl;
 cin >> key;
 int retValue = linearSearch(numbers,size,key);
 if(retValue >= 0){
     cout << "Key found at position " << retValue << endl;
 }else{
     cout << "Key not found" << endl;
 }

return 0;
}

4 个答案:

答案 0 :(得分:10)

问题在于:

if(key == arr[i]){
     return i;
 }else{
     return -1;
 }

在第一次比较后返回i或-1,因此根本不会搜索数组的其余部分。您应该仅在函数末尾删除else return -1子句和return -1

如果您这样做,linearSearch功能应如下所示:

int linearSearch(int arr[],int size, int key){
    for(int i = 0; i < size; ++i){
        if(key == arr[i]){
           return i;
        }
    }
    return -1;
}

答案 1 :(得分:0)

你的linearSearch函数的问题是,如果不匹配,它会在第一次比较后返回-1(未找到)。它不会搜索整个数组。

尝试以下代码,向后搜索并在找到巧合时停止,或者&#34; bottom&#34;传递数组(i等于-1)。它返回i的当前值,如果满足重合,则可以进入数组;如果搜索期间没有任何反应,则返回-1。

int linearSearch(int arr[], int size, int key){
    int i;
    for(i = size-1; i >= 0 && key != arr[i]; --i);
    return i;
}

答案 2 :(得分:0)

int linearSearch(int array[], int n,int searchKey){

    for(int i=0; i<n;i++){
        if(searchKey==array[i]){
        return i;
        }
    }
    return -1;

}

答案 3 :(得分:0)

int linearSearch(int arr[], int size, int key) {
    for (int i = 0; i < size; i++) {
        if (arr[i]==key) {
            return i;
        }
    }
    return -1;
}

问题是您返回的是i还是-1,否则什么也没有。返回这两个代码后,代码将退出。而且我还认为retValue也可以与1一起增加,以具有正确的位置。