Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/367.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_Sorting - Fatal编程技术网

Java 帮助编写快速排序

Java 帮助编写快速排序,java,sorting,Java,Sorting,我正在编写一个java应用程序。我有一个名为Node的类。我创建了一个ArrayList对象,并在其中添加了一些节点,每个节点都有一个整数数据和一个双概率。我想在arrayList中按概率对节点进行排序。我编写了以下方法: private void sort(ArrayList<Node> list2) { int n = list2.size(); for (int i = 1; i < n; i++) { int m = list2

我正在编写一个java应用程序。我有一个名为Node的类。我创建了一个ArrayList对象,并在其中添加了一些节点,每个节点都有一个整数数据和一个双概率。我想在arrayList中按概率对节点进行排序。我编写了以下方法:

     private void sort(ArrayList<Node> list2) {
    int n = list2.size();
    for (int i = 1; i < n; i++) {
        int m = list2.get(i);
        int j = i - 1;
        while ((j >= 0) && (list2.get(j).prob > m.prob))
            list2.set(j + 1, list2.get(j--));
        list2.set(j + 1, m);
      }

     }
private void排序(ArrayList list2){
int n=list2.size();
对于(int i=1;i=0)和&(list2.get(j.prob>m.prob))
list2.set(j+1,list2.get(j--));
列表2.集合(j+1,m);
}
}

但这不是一种快速的排序方法。我怎样才能更快地排序?我可以使用java中的Collections.sort()方法实现这个目标吗?怎样?请您指导我好吗?

是的,您可以使用
Collections.sort()
——这几乎肯定是正确的做法。您至少应该从一开始就这样做,并对其进行基准测试,看看它是否足够快。如果您有更多关于列表的信息(例如,它可能是“大部分排序”的),您可能会做得更好,但采取简单的方法是一个很好的起点


请注意,您的示例代码与您的描述不符-您描述了一个
ArrayList
,但您的代码只是用于
ArrayList

,是的,您可以使用
集合.sort()
——这几乎肯定是正确的做法。您至少应该从一开始就这样做,并对其进行基准测试,看看它是否足够快。如果您有更多关于列表的信息(例如,它可能是“大部分排序”的),您可能会做得更好,但采取简单的方法是一个很好的起点

请注意,示例代码与您的描述不符-您描述了一个
ArrayList
,但您的代码仅用于
ArrayList

是的,您可以(也应该)使用Collections.sort()。这种排序方式已经过优化,并且可能总是比您自己编写的实现运行得更快

但是,您的代码当前不适用于Collections.sort()。为此,您在列表中放置的对象应同时具有“数据”和“概率”字段

下面是一个简单的例子:

public class DataProbability implements Comparable<DataProbability> {
    private int data;
    private double probability;

    public int getData() {
        return data;
    }

    public double getProbability() {
        return probability;
    }

    public int compareTo(DataProbability pProb) {
        return Double.compare(getProbability(), pProb.getProbability());
    }
}

// Later, with your list
List<DataProbability> lDataList = new ArrayList<DataProbability>();
// Add some elements
Collections.sort(lDataList);
公共类DataProbability实现可比较{
私有int数据;
私人双重概率;
公共int getData(){
返回数据;
}
公共双概率{
返回概率;
}
公共整数比较(数据概率pProb){
返回Double.compare(getProbability(),pProb.getProbability());
}
}
//稍后,与你的名单
List lDataList=new ArrayList();
//添加一些元素
Collections.sort(lDataList);
对列表排序时,有两个选项:

  • 确保要排序的“对象”实现可比较的接口(这就是我刚才使用的)
  • 或者,您也可以指定在调用Collections.sort()时使用的比较器
是的,您可以(也应该)使用Collections.sort()。这种排序方式已经过优化,并且可能总是比您自己编写的实现运行得更快

但是,您的代码当前不适用于Collections.sort()。为此,您在列表中放置的对象应同时具有“data”和“probability”字段

下面是一个简单的例子:

public class DataProbability implements Comparable<DataProbability> {
    private int data;
    private double probability;

    public int getData() {
        return data;
    }

    public double getProbability() {
        return probability;
    }

    public int compareTo(DataProbability pProb) {
        return Double.compare(getProbability(), pProb.getProbability());
    }
}

// Later, with your list
List<DataProbability> lDataList = new ArrayList<DataProbability>();
// Add some elements
Collections.sort(lDataList);
公共类DataProbability实现可比较{
私有int数据;
私人双重概率;
公共int getData(){
返回数据;
}
公共双概率{
返回概率;
}
公共整数比较(数据概率pProb){
返回Double.compare(getProbability(),pProb.getProbability());
}
}
//稍后,与你的名单
List lDataList=new ArrayList();
//添加一些元素
Collections.sort(lDataList);
对列表排序时,有两个选项:

  • 确保要排序的“对象”实现可比较的接口(这就是我刚才使用的)
  • 或者,您也可以指定在调用Collections.sort()时使用的比较器

排序用户定义的对象时需要实现可比较的接口。您还需要覆盖equals()和hashcode()方法。但是,对仅包含基本数据类型对象的列表进行排序时,不需要此操作。

对用户定义的对象进行排序时,需要实现可比接口。您还需要重写equals()和hashcode()方法。但是,对仅包含基本数据类型对象的列表进行排序时不需要这样做