帮助写快速排序

时间:2010-12-17 13:36:04

标签: 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.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);
      }

     }

但它不是一种快速的排序方法。我怎样才能更快地排序?为了这个目的,我可以在java中使用Collections.sort()方法吗?怎么样 ?你能指导我吗?

3 个答案:

答案 0 :(得分:3)

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

请注意,您的示例代码与您的说明不符 - 您已经描述了ArrayList<Node>,但您的代码只适用于ArrayList<Integer>

答案 1 :(得分:1)

是的,您可以(并且应该)使用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);

排序列表时,您有两个选项:

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

答案 2 :(得分:0)

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