アルゴリズムの勉強をしています。二分探索法というものの理解をしようと思い自分で記述してみたのですが意図した出力結果が出ません。
調べてみるとfor文を使っている方がいたので同じように
for(head<=tail){...}
というような記述方法を試してみたのですが無限ループになってしまいます。
class dot{ public static void main(String[] args){ int[] ary = {11, 13, 17, 19, 23, 29, 31}; int head = 0; int tail = ary.length; for(int i = 0; i < ary.length; i++){ int center = (head + tail) / 2; //3 if(ary[center] == 17){ System.out.println((center + 1)+"番目が一致"); }else{ if(ary[center] < 17){ head = center + 1; }else if(ary[center] > 17){ tail = center -1; } } } } }
出力結果↓
3番目が一致 3番目が一致 3番目が一致 3番目が一致 3番目が一致
条件分岐をしているはずなのに毎回「3番目が一致」と表示されるのはなぜなのでしょうか
アドバイスお願いします!
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/04/11 09:41
2021/04/11 11:06 編集
2021/04/12 08:54