0
文字配列を検索するバイナリ検索を実装しようとしています。実行されると、プログラムは「文字Bがインデックス1の要素で見つかった」と繰り返し入力を変更したにもかかわらず、決して変化しません。私はどこに間違っているのか分からない。文字配列を使用したバイナリ検索
#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;
}
配列 'a'のサイズが3であっても、バイナリ検索のサイズとして8を使用しています。これは問題になる可能性があります。 – templatetypedef
配列の範囲外にアクセスしています。配列のサイズを検索関数に渡して、サイズに基づいて中間値を計算する必要があります。 – Arunmu
@ NathanOliver配列aは変わらないと知っていますが、プログラムを実行するたびに別の結果が得られるはずはありませんか?たとえば、最初の実行では「A」を検索し、2回目の実行では「B」を検索します。 – user6470814