2017-11-10 10 views
0

クラスのバイナリ検索について学習しています。下のコードは単なる例です。それで、このコードはコンパイルされていますが、出力を表示していないと言います。バイナリ検索の知識が不足しているため、なぜ出力がないのか分かりません。誰かが本当によく書かれたチュートリアルの方向を指してくれるのですか?または、コードの何が間違っているかを示すのに役立ちます。バイナリ検索 - コードをコンパイルして実行した後に出力が表示されない

#include "stdafx.h" 
#include <iostream> 
#include <iomanip> 
#include <conio.h> 
#include <vector> 
#include <algorithm> 

using namespace std; 
int SIZE = 10; 

int main() 
{ 
    int thisArray[] = { 99,86,44,55,78,63,0,32,11 }; 
    int num = 0; 

    int n = 0; 

    int first; 
    int last; 
    int middle; 
    first = 0; 
    last = n - 1; 
    middle = (first + last)/2; 
    cout << "Enter the total number of elements\n"; 
    cin >> n; 

    cout << "Entered " << n << "number.\n"; 

    for (int i = 0; i < n; i++) { 
     cin >> thisArray[i]; 
    } 

    cout << "Enter a number to find.\n"; 
    cin >> num; 

    while (first <= last) { 
     if (thisArray[middle] < num) { 
      first = middle + 1; 
     } 
     else if (thisArray[middle] == num) { 
      cout << num << " found at location " << middle + 1 << "\n"; 
      break; 
     } 
     else { 
      last = middle - 1; 
     } 
     middle = (first + last)/2; 
    } 


    return 0; 
} 

編集:

#include "stdafx.h" 
#include <iostream> 
#include <iomanip> 
#include <conio.h> 
#include <vector> 
#include <algorithm> 

using namespace std; 
int SIZE = 10; 

int main() 
{ 
    //this is my binary search 
    int thisArray[10] = { 0,11,32,44,55,63,78,86,99 }; 
    int i = 0; //index of the array 
    int n = 0; //variable of number that will be looked for 
    int first = 0; 
    int last = SIZE - 1; 
    int middle; 
    int pos = -1; 
    bool found = false; 
    int count = 0; 
    while (found) { 

     cout << "Enter a number to look for.\n"; 
     cin >> n; 


     while (first <= last) { 
      middle = first + last/2; 
      if (thisArray[middle] == n) { 

       pos = middle; 
       cout << "item found at " << middle + 1 << "\n"; 

       exit(0); 
      } 
      else if (thisArray[middle] > n) { 
       last = middle - 1; 
      } 
      else { 
       first = middle + 1; 
      }//endif 
     }//end while 
    }//end big while 
    //if() 


    return 0; 
} 

私はそれを得ました。誰も助けてくれてありがとう!

+0

コードをステップ実行してデバッガでどのように動作するかを確認すると役に立ちます。バイナリ検索のためにソートされた配列が必要ですが、それはおそらく問題でしょうか? –

+1

あなたの入力と予想される出力を投稿してください。バイナリ検索は* sorted *配列、BTWに対してのみ機能します。 – MFisherKDX

+0

退職した忍者さん、ありがとうございます。私はすぐにそれを並べ替えます。 – Arturo

答えて

2

first == 0last == -1のため、何も出力されません。したがって、first <= lastは決して真ではなく、ループ本体は決して実行されません。

+0

現在、現在作業中です。 – Arturo

0

あなたは何を知っていますか?配列が正しくバイナリ検索プロパティを使用するためにソートされていない場合、どのようにバイナリ検索を使用することができます...

とジャック・ミーガースタイルのような質問に答えるのをやめてください、私は直接問題に対処していない答えが嫌い、 uはトンもn

の値を受け入れた後last = SIZE - 1;

またはlast = n - 1;を計算する

変更last = n - 1; ...

+0

まあ、私が言ったように、私はこの種の並べ替えには慣れていないので、私の間違いを私に知らせるために感謝します。 – Arturo

+0

ソートの種類はどういう意味ですか:/?バイナリ検索algoは問題ありません。それを使用する前に配列をソートするだけで、モノトーンのプロパティが得られます –

0

簡単な質問を修正再表示彼は配列をソートする必要があります!

+0

ありがとう!私はSIZE -1を代わりに使用しました。 – Arturo

0

それを実演しました。コードは私が見つけた例でしたが、forループは私のために正しく動作していなかったので、私はそれを取り除きました。そして反復のために私はdo-whileループを実装しました。しかし、コードは現在動作します。

#include "stdafx.h" 
#include <iostream> 
#include <iomanip> 
#include <conio.h> 
#include <vector> 
#include <algorithm> 

using namespace std; 
int SIZE = 10; 

int main() 
{ 
    //this is my binary search 
    int thisArray[10] = { 0,11,32,44,55,63,78,86,99 }; 
    int i = 0; //index of the array 
    int n = 0; //variable of number that will be looked for 
    int first = 0; 
    int last = SIZE - 1; 
    int middle; 
    int pos = -1; 
    bool found = false; 
    int count = 0; 
    do { 
     cout << "Enter a number to look for.\n"; 
     cin >> n; 


     while (first <= last) { 
      middle = first + last/2; 
      if (thisArray[middle] == n) { 

       pos = middle; 
       cout << "item found at " << middle + 1; 
       exit(0); 
      } 
      else if (thisArray[middle] > n) { 
       last = middle - 1; 
      } 
      else { 
       first = middle + 1; 
      }//endif 
     }//end while 
    } while (found = true); 
    return 0; 
} 
関連する問題