Java 帮助编写快速排序
我正在编写一个java应用程序。我有一个名为Node的类。我创建了一个ArrayList对象,并在其中添加了一些节点,每个节点都有一个整数数据和一个双概率。我想在arrayList中按概率对节点进行排序。我编写了以下方法: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
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()时使用的比较器
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()时使用的比较器