簡體   English   中英

如果已排序,則使用二進制搜索;否則,使用線性搜索

[英]Use binary search if sorted otherwise use linear search

給我一個問題,給用戶一個空的食譜書,他們可以輸入和排序食譜。

我知道一本書如果是空的,則排序,有一個食譜,有兩個食譜(升/降)。 這些可以使用二進制搜索。

但是,當用戶輸入第三個食譜時,它可能是“ cookies,甜甜圈,火雞”(已排序)或“ cookies,甜甜圈,蘋果”,但未排序。 如果未排序,則必須使用線性搜索。

這就是我到目前為止

 public void sortBook(int choice, boolean ascend) {
  RecipeBookComparator comparing = new RecipeBookComparator(choice, ascend);
  mList.sort(comparing);}

public class RecipeBookComparator implements Comparator {
  private int mSortRBook;
  private boolean mAscend;
  public RecipeBookComparator (int choice, boolean ascend) {
     mSortRBook = choice;
     mAscend = ascend;
  }
  public int compare(Object o1, Object o2) {
     Recipe s1 = (Recipe)o1, s2 = (Recipe)o2;
     switch (mSortRBook) {
        case 1:
           if (mAscend == true) {
              int compareName = s1.getName().compareTo(s2.getName());
              if (compareName != 0) {
                 return compareName;
              }
           }
           else {
              int compareName = s1.getName().compareTo(s2.getName());
              if (compareName != 0) {
                 return compareName * -1;
              }
           } ///more cases...

我知道我該怎么做,但是我不知道如何“按代碼”進行操作

要了解列表是否已排序,您必須將每個元素與ist鄰居進行比較。 如果只有數千個元素不按順序排列,則二進制搜索可能會失敗。 因此,您必須檢查完整列表。 但是遍歷所有列表以檢查列表是否排序比通過線性搜索在列表中查找一個元素要花費更長的時間,因此這沒有任何意義。 如果您不確定不確定列表是否已排序,請使用線性搜索。 而已。

您的代碼說:

mList.sort(比較);

我相信您誤解了您被要求做的事情-假設問題的標題是“如果進行排序,則使用二進制搜索,否則使用線性搜索”,這是您應該做的。 您根本不應該對它們進行排序。 這個問題不需要任何關於如何在Java中對事物進行排序的知識。

您需要了解的是搜索 ,而不是排序。 以及如何檢查輸入序列是否已經排序。

現在,坦白地說,從技術上講,您可以通過對序列進行實際排序來檢查序列是否已經排序,然后檢查生成的序列是否與開始時的順序相同。 但我不建議這樣做。

相反,我建議使用比較器比較序列中的每對相鄰元素 (如果有),以檢查序列是單調遞增還是單調遞減。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM