2015-06-10 3 views
0

Я пытаюсь создать алгоритм линейного поиска на C++, но у меня возникают некоторые проблемы с моей функцией linearSearch в моем коде. Это простой цикл цикла, и я не вижу, что кажется проблемой, я прошу пользователя ввести ключ, и если это ключ в массиве, он должен дать правильную позицию, но это не так. Может ли кто-нибудь увидеть, где я ошибся в своей реализации?C++ Линейный алгоритм поиска

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

Просто FWIW, 'станд :: find' уже обеспечивает линейный поиск. –

ответ

10

Проблема здесь:

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

Вы возвращаетесь либо я или -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; 
} 
+0

Кроме того, он даже не может вызывать 'linearSearch()' со значением, которое существует. Он сгенерировал 20 случайных чисел на [0,100], но код не проверял массив. –

+0

@TimBiegeleisen: массив печатается по мере его заполнения. –

+0

Я стою исправлено. Я парень Java, поэтому у меня есть некоторое терпение. –

0

Проблема с функцией linearSearch является то, что она возвращает -1 (не найден) сразу после первого сравнения, если не совпадает. Он не ищет полный массив.

Пробуйте следующий код, который выполняет поиск назад и останавливается при обнаружении совпадения или «нижнем» массиве передается (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; 
} 
0
int linearSearch(int array[], int n,int searchKey){ 

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

} 
+1

Вы должны правильно отформатировать код. Кроме того, напишите * как * это решит проблему. –

Смежные вопросы