Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如果排序,则使用二进制搜索,否则使用线性搜索_Java_Search_Binary Search_Linear Search - Fatal编程技术网

Java 如果排序,则使用二进制搜索,否则使用线性搜索

Java 如果排序,则使用二进制搜索,否则使用线性搜索,java,search,binary-search,linear-search,Java,Search,Binary Search,Linear Search,我遇到了一个问题,用户得到了一本空食谱,他们可以输入和排序食谱 我知道如果一本书是空的,有一个食谱,有两个食谱(升序/降序),它就会被排序。这些可以使用二进制搜索 但当用户输入第三个食谱时,它可能是“饼干,甜甜圈,火鸡”(已分类)或“饼干,甜甜圈,苹果”,而这并没有分类。如果它没有排序,那么我必须使用线性搜索 这就是我目前所拥有的 public void sortBook(int choice, boolean ascend) { RecipeBookComparator comparin

我遇到了一个问题,用户得到了一本空食谱,他们可以输入和排序食谱

我知道如果一本书是空的,有一个食谱,有两个食谱(升序/降序),它就会被排序。这些可以使用二进制搜索

但当用户输入第三个食谱时,它可能是“饼干,甜甜圈,火鸡”(已分类)或“饼干,甜甜圈,苹果”,而这并没有分类。如果它没有排序,那么我必须使用线性搜索

这就是我目前所拥有的

 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...
我知道我应该做什么,但我不知道如何“从代码角度”处理它。

您的代码说:

排序(比较)

我相信你误解了别人要求你做的事情——假设你的问题的标题是“如果排序,使用二进制搜索,否则使用线性搜索”。你根本不应该把它们分类。这个问题不需要知道如何在Java中排序

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

现在,诚然,从技术上来说,你可以通过实际排序来检查序列是否已经排序,然后检查结果序列是否与你开始时的顺序相同。但我不建议这样做

相反,我建议使用比较器来比较序列中的每对相邻元素(如果有),以检查序列是单调递增还是单调递减。

您的代码显示:

排序(比较)

我相信你误解了别人要求你做的事情——假设你的问题的标题是“如果排序,使用二进制搜索,否则使用线性搜索”。你根本不应该把它们分类。这个问题不需要知道如何在Java中排序

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

现在,诚然,从技术上来说,你可以通过实际排序来检查序列是否已经排序,然后检查结果序列是否与你开始时的顺序相同。但我不建议这样做


相反,我建议使用比较器来比较序列中的每对相邻元素(如果有),以检查序列是单调递增还是单调递减。

要确定列表是否已排序,必须将每个元素与ist相邻元素进行比较。如果数千个元素中只有一个元素没有按顺序排列,则二进制搜索可能会失败。因此,您必须检查完整的列表。但是遍历所有列表检查列表是否已排序要比使用线性搜索查找列表中的一个元素花费更长的时间,因此这没有意义。如果您不确定列表是否已排序,请使用线性搜索。就是这样。

要确定列表是否已排序,您必须将每个元素与ist邻居进行比较。如果数千个元素中只有一个元素没有按顺序排列,则二进制搜索可能会失败。因此,您必须检查完整的列表。但是遍历所有列表检查列表是否已排序要比使用线性搜索查找列表中的一个元素花费更长的时间,因此这没有意义。如果您不确定列表是否已排序,请使用线性搜索。就是这样。

为什么需要二进制搜索来搜索包含2个元素的列表?你到底想做什么?看起来你是在尝试排序,而不是搜索。您需要检查输入是否已排序,然后按顺序搜索为什么需要二进制搜索来搜索包含2个元素的列表?你到底想做什么?看起来你是在尝试排序,而不是搜索。您需要检查输入是否已排序,然后按顺序搜索如果只进行一次搜索,则为true;如果要对同一固定数据列表进行多次搜索,则为not true。如果只进行一次搜索,则为true;如果要对同一数据列表进行多次搜索,则为not true,修正了数据列表。哦,你说得对。我想我真正的意思是,如果用户想在书中找到一些东西,但没有排序,那么使用线性搜索,如果是,那么使用二进制搜索。哦,你是对的。我想我真正的意思是,如果用户想在书中找到一些东西,但没有排序,那么使用线性搜索,如果是,那么使用二进制搜索。