1

重複の可能性:
Arrays.binarySearchが正常に機能しない

BinarySearchの私の理解から、要素が配列またはコレクションに見つからない場合にのみ挿入ポイントを返します。

したがって、このコードは私を少し混乱させます:

import java.util.*;

public class LookinGlass {

    public static void main(String args[]){

        String[] asa = {"x", "c", "b", "d"};

        int x  = Arrays.binarySearch(asa, "b");

        System.out.println("Index is at " + x);

        Arrays.sort(asa);

        int y = Arrays.binarySearch(asa, "b");

        System.out.println(x + " " + y);
    }

}

xを出力すると、配列に明らかに「b」が存在し、それを見つけることができるのに、なぜインデックスが-1であると表示されるのですか?

ありがとう

4

3 に答える 3

1

バイナリ検索はソートされていない配列では機能しないためです。より大きな要素が表示された場合、検索されたアイテムは配列に含まれていないと結論付けます。

于 2012-12-28T04:39:58.200 に答える
1

バイナリ検索アルゴリズムは、最初の配列呼び出しで、昇順で並べ替えられたデータを参照していることを前提としています。

 String[] asa = {"x", "c", "b", "d"};

ソートされていません。このため、バイナリ検索アルゴリズムを使用して配列内で見つからなかったため、Arrays.binarySearch(asa, "b");呼び出しが返されます。-1"b"

于 2012-12-28T04:40:40.227 に答える
0

二分探索が機能する方法に隣接していると考え、ソートされていないリストに対して二分探索を実行した場合に何が起こるかを想像しようとすると、なぜそれが機能しないのかが明らかになるはずです。

それでも疑問がある場合は、独自の二分探索を実装して、それを実行してください。

于 2012-12-28T04:44:52.667 に答える