8
String[] sortedArray = new String[]{"Quality", "Name", "Testing", "Package"};   

// Search for the word "cat" 
int index = Arrays.binarySearch(sortedArray, "Quality");  

私はいつも得る-3。問題は にあり"Name"ます。"Name"配列に入れられないのはなぜですか? 何か案が?

4

3 に答える 3

27

を使用するにはbinarySearch、最初に配列を自分でソートする必要があります。

String[] sortedArray = new String[]{"Quality", "Name", "Testing", "Package"};   

java.util.Arrays.sort(sortedArray);

int index = Arrays.binarySearch(sortedArray, "Quality");  
于 2010-09-09T06:09:18.573 に答える
6

配列はソートされている必要があります。binarySearch() の Javadoc から:

この呼び出しを行う前に、その要素の自然な順序に従って、範囲を昇順に並べ替える必要があります。ソートされていない場合、結果は未定義です。

于 2010-09-09T06:09:00.943 に答える
2

二分探索を機能させるには、配列をソートする必要があります。binarySearchの javadoc には次のように書かれています。

この呼び出しを行う前に、( sort(Object[]) メソッドによる) 要素の自然な順序に従って、配列を昇順に並べ替える必要があります。ソートされていない場合、結果は未定義です。

(強調を追加しました。)

そしてその理由は簡単です。二分探索アルゴリズムには、入力配列がソートされているという前提条件があります。

于 2010-09-09T06:24:43.017 に答える