0

ユーザーに空のレシピ本が渡され、レシピを入力して並べ替えることができるという問題が発生しました。

本が空で、1 つのレシピと 2 つのレシピ (昇順/降順) がある場合、本は並べ替えられることを知っています。これらはバイナリ検索を使用できます。

しかし、ユーザーが 3 番目のレシピを入力すると、それは「cookies, donut, turkey」(ソート済み) または「cookies, donut, apples」のいずれかであり、ソートされていません。ソートされていない場合は、線形検索を使用する必要があります。

これは私がこれまでに持っているものです

 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...

何をすべきかはわかっているが、「コード的に」アプローチする方法がわからない

4

2 に答える 2

1

あなたのコードは言う:

mList.sort(比較);

質問のタイトルである「ソートされている場合はバイナリ検索を使用し、それ以外の場合は線形検索を使用する」と仮定して、あなたが求められていることを誤解していると思います。それらをソートすることはまったく想定されていません。この問題では、Java で物事をソートする方法についての知識はまったく必要ありません。

理解する必要があるのは、並べ替えではなく検索です。また、一連の入力が既にソートされているかどうかを確認する方法。

確かに、技術的には、シーケンスを実際に並べ替えてから、結果のシーケンスが最初の順序と同じ順序になっているかどうかを確認することで、シーケンスが既に並べ替えられているかどうかを確認できます。しかし、私はそれをお勧めしません。

代わりに、 Comparator を使用して、シーケンス内の隣接する要素 (存在する場合) の各ペアを比較し、シーケンスが単調に増加しているか単調に減少しているかを確認することをお勧めします。

于 2013-12-19T22:28:44.783 に答える