2013-05-02 36 views
0
public class BinarySearchCollections { 
    public static void search(List<String> list) { 
    list.clear(); 
    list.add("b"); 
    list.add("a"); 
    list.add("c"); 
    System.out.println(Collections.binarySearch(list, "b")); 
    System.out.println(list); 
    } 
    public static void main(String[] args) { 
    List<String> lis = new ArrayList<String>(); 
    BinarySearchCollections bs = new BinarySearchCollections(); 
    bs.search(lis); 
    } 
} 

在這裏我得到ANS爲-3(因爲它是告訴我它是怎麼回事什麼位置添加),但我已經有b在我的名單。()爲什麼得到錯誤的答案用Collections.binarySearch時

+0

@dlev這將是一個答案,正確的 – eis 2013-05-02 18:16:19

+0

是的,你是對的...謝謝 – Sunny 2013-05-02 18:19:38

+0

一般來說,你需要排序之前,在Java中執行二進制搜索。 – ApproachingDarknessFish 2013-05-02 18:22:50

回答

1

您的原始列表沒有排序,所以二進制搜索會給你一個無意義的答案。

想象中的步驟它其實需要:

「是B> A是的,所以看起來高?」。

「是B> C嗎?不,但我們不能再低,所以在指數2插入(又名返回-3)」

如果你想二進制搜索工作,給它一個列表可以採取有意義的步驟,然後給你正確的答案。

1

Collections.binarySearch()不確保列表在嘗試搜索之前排序。在致電binarySearch()之前,您需要確保是這種情況。

如果它首先檢查列表,它會將O(lg(n))搜索變成O(n + lg(n))檢查/搜索,從而降低性能。 (O(nlg(n))如果它必須對列表進行排序)。

您應該檢查一下List.Sort()方法。

相關問題