java.util.Collections.sort()方法的时间复杂度是多少?

时间:2010-11-23 08:40:09

标签: java sorting collections time-complexity

我写了以下课程:

public class SortingObjectsWithAngleField implements Comparator<Point> {  
    public int compare(Point p1, Point p2) {
        double delta = p1.getAngle() - p2.getAngle();
        if(delta == 0.00001)
            return 0;
        return (delta > 0.00001) ? 1 : -1;
    }
}

然后,在我的main()方法中,我创建了一个List,我添加了一些具有“X”和“angle”字段的对象。

然后我使用:

Collections.sort(list, new SortingObjectsWithAngleField());

这种排序方法的复杂性是什么?

4 个答案:

答案 0 :(得分:35)

您可以阅读有关收藏品排序的文档,但这里适合您:

  

排序算法是经过修改的   mergesort(合并为   如果最高元素,则省略   低子列表小于最低值   高子列表中的元素)。这个   算法提供有保证的n log(n)   性能

你的比较器不会改变这种复杂性,除非你对你的集合中的循环做任何事情,你不这样做。

答案 1 :(得分:8)

您应该在API中找到它:n log(n)

答案 2 :(得分:2)

取自Collections.sort -

  

排序算法是经过修改的   mergesort(合并为   如果最高元素,则省略   低子列表小于最低值   高子列表中的元素)。这个   算法提供有保证的n * log(n)   性能

答案 3 :(得分:0)

每个人都说了API doc,并添加了一些我发现的更相关的信息。

如果提供自定义比较器,则使用合并排序的修改版本(也称为timsort)。该实现是从list sort for python借来的。

在最佳情况下,只需要进行n-1个比较,因此best case is O(n)guaranteed performance in all the cases is O(n.lg(n))