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