二分法を使用する場合は、データが規則的で反復するべきではありません
そして、推測ゲームをプレイする子供は、あなたが数を推測するとき、彼は彼が望んでいたよりも、あなたの3つの選択肢を教えてくれます、あなたは彼が考えた1〜100の数を推測できるようになる、と同じです規模の大小、または推測、推測の最小数を使用するためには、あなたが少しを推測する場合は、あなたが51から100に推測を開始しなければならないので、次回の推測は75で、50件の推測から開始する必要があります2つの部分に(51〜100の半分)が、彼は、少し大きいと言う場合は1と49の間の数で、その次の時間25推測、の導入は時間を推測することとなる各可能な値
達成考えた:データは、シーケンスの最初の半分で検索され、xの値が現在の位置よりも小さい開始シーケンスを見つけるための中間位置から、所定の値xに、昇順であり、その後、データを2つに分割されていることを前提と
位置xが現在の値よりも大きい場合、配列の後半でルックアップが、そのデータは、二つに分割されています
現在位置の値がXに等しい場合、直接返す-1を返し、それが見つからない場合
実装コード:
パブリック クラスハーフ{ 公共 静的 ボイドメイン(文字列[]引数){ INT [] ARR = 新しい INT [] {12、23、34、45、56、67、77、89、90}。// 長さ:9 のSystem.out.println(検索(ARR、34 ))。 } パブリック 静的 int型の検索(値int [] ARR、INT キー){ int型 0 =起動します。 int型エンド= arr.length - 1。// 8 ながら(<START = 端){ int型中間=(スタート+エンド)/ 2。//中间值:4,1,2 場合(キー< ARR [中央]){ 端 =中間- 1 。 } 他の 場合(>キー[中間] ARR){ 開始 =中央+ 1 。 } 他{ 戻り中間。 } } 戻り -1 。 } } // 输出2