2016-07-19 13 views
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; 
} 
+2

配列 'a'のサイズが3であっても、バイナリ検索のサイズとして8を使用しています。これは問題になる可能性があります。 – templatetypedef

+1

配列の範囲外にアクセスしています。配列のサイズを検索関数に渡して、サイズに基づいて中間値を計算する必要があります。 – Arunmu

+0

@ NathanOliver配列aは変わらないと知っていますが、プログラムを実行するたびに別の結果が得られるはずはありませんか?たとえば、最初の実行では「A」を検索し、2回目の実行では「B」を検索します。 – user6470814

答えて

0

あなたのバイナリ検索はboolを返し、何が戻ってきていることは手紙が見つかった、またはされた-1それ以外の位置です。見つかった位置が0と異なるたびに関数が1(真)を返します。そのため、インデックス1にBが見つかったと常に出力します。

intを返すようにバイナリ検索を変更し、

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

それがそれを解決しました。助けてくれてありがとう! – user6470814

関連する問題