亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么二進制搜索返回 -1

為什么二進制搜索返回 -1

達令說 2021-10-13 14:09:52
我正在開發一個小程序:public static void main( String args[])    {        String[] places = {"Bangalore","Pune","San Francisco","New York City"};        Arrays.sort(places, new Comparator<String>() {        @Override        public int compare(String o1, String o2) {            return o2.compareTo(o1);        }    });        System.out.println(Arrays.binarySearch(places, "New York City"));    }該程序正在打印 -1,但我的數組中有“紐約市”,那么為什么在這種情況下結果為負數?
查看完整描述

3 回答

?
慕哥9229398

TA貢獻1877條經驗 獲得超6個贊

通常,Arrays.binarySearch假設數組中的項目已按其自然順序排序。如果不以這種方式排序,則二分搜索算法將不起作用。


您Comparator正在按自然順序的相反順序排序,因此算法找不到紐約市。


但是它的重載binarySearch需要 aComparator,因此算法可以假設它的排序方式與Comparator定義順序的方式相同。


數組必須根據指定的比較器按升序排序(如sort(T[], Comparator) method)在進行此調用之前。


Comparator在您的binarySearch通話中重用您的。


String[] places = {"Bangalore","Pune","San Francisco","New York City"};


Comparator<String> c = new Comparator<String>() {

    @Override

    public int compare(String o1, String o2) {

        return o2.compareTo(o1);

    }

};

Arrays.sort(places, c);

System.out.println(Arrays.binarySearch(places, "New York City", c));

然后你會得到正確的輸出2。


查看完整回答
反對 回復 2021-10-13
?
哈士奇WWW

TA貢獻1799條經驗 獲得超6個贊

使用二分搜索時,被搜索的數據對象數組必須根據用于搜索的比較器排序。

在您的示例中,城市沒有任何特定順序,因此搜索將不起作用。

您的比較器按字母順序排序,因此數組也必須按逆字母順序排列。


查看完整回答
反對 回復 2021-10-13
?
冉冉說

TA貢獻1877條經驗 獲得超1個贊

Arrays.binarySearch需要數組按升序排序,但在您的情況下,您將其降序。如果您使用下面的更改比較函數,它將按升序排序


public int compare(String o1, String o2) {

     return o1.compareTo(o2);

}

因此,如果您按升序對其進行排序,它將起作用


查看完整回答
反對 回復 2021-10-13
  • 3 回答
  • 0 關注
  • 202 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號