2016-07-19 17 views
0

Ich versuche, eine binäre Suche zu implementieren, um ein char-Array zu durchsuchen. Wenn es ausgeführt wird, sagt das Programm wiederholt "Der Buchstabe B wurde an dem Element mit Index 1 gefunden" und ändert sich nie, trotz Änderung der Eingabe. Ich bin mir nicht sicher, wo ich falsch liege.Binäre Suche mit Char-Array

#include <iostream> 
#include <algorithm> 
using namespace std; 

bool binarySearch(char usedLetters[], int used, char letterToFind); 

int main() 
{ 
char a[] = {'A', 'B', 'C'}; 

int userValue; 

cout << "Enter a letter: " << endl; 
cin >> userValue; 

int result = binarySearch(a, 8, userValue); 

if(result == true) 
{ 
    cout << "The letter " << a[result] << " was found at the" 
      " element with index " << result << endl; 
} 
else 
{ 
    cout << "The letter " << userValue << " was not found. " << endl; 
} 
} 

bool binarySearch(char usedLetters[], int used, char letterToFind) 
{ 
int first = 0; 
int last = used - 1; 
int mid; 
int position = -1; 
bool found = false; 

while (!found && first <= last) 
{ 
    mid = (first + last)/2; 
    if (usedLetters[mid] == letterToFind) 
     { 
      found = true; 
      position = mid; 
     } 
    else if (usedLetters[mid] > letterToFind) 
     last = mid - 1; 
    else 
     first = mid + 1; 
} 
return position; 
} 
+2

Sie verwenden 8 als die Größe des Arrays zur binären Suche, obwohl das Array 'a' Größe 3 hat. Das könnte ein Problem sein. – templatetypedef

+1

Sie greifen auf das Array außerhalb der Grenzen zu. Sie sollten die Größe des Arrays an Ihre Suchfunktion übergeben und die Mitte basierend auf der Größe ermitteln. – Arunmu

+0

@NathanOliver Ich weiß, dass sich das Array nicht ändert, aber sollte ich nicht jedes Mal ein anderes Ergebnis bekommen, wenn ich das Programm starte? Zum Beispiel suche ich beim ersten Durchlauf nach 'A' und suche im zweiten Durchlauf nach 'B'? – user6470814

Antwort

0

Ihre binäre Suche liefert einen bool, und was Sie Rückkehr ist die Position, in der der Brief gefunden wurde, oder andernfalls -1. Ihre Funktion wird jedes Mal, wenn die gefundene Position 0 ist, 1 (wahr) zurückgeben, deshalb gibt sie immer aus, dass sie B bei Index 1 gefunden hat.

Ändern Sie einfach Ihre binäre Suche, um eine int zurückzugeben und ändern Sie Ihre Bedingungen in:

if (result == -1) 
    // Not found 
else 
    // Found 
+0

Das hat es gelöst. Danke für die Hilfe! – user6470814