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

use*_*221 17 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;
    }
}
Run Code Online (Sandbox Code Playgroud)

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

然后我用:

Collections.sort(list, new SortingObjectsWithAngleField());
Run Code Online (Sandbox Code Playgroud)

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

Jan*_*omä 36

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

排序算法是修改后的mergesort(如果低子列表中的最高元素小于高子列表中的最低元素,则省略合并).该算法提供有保证的n log(n)性能.

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

  • 一个例子是根据它们的最小元素列表.在这种情况下,比较器必须遍历所有列表才能找到最小元素.然后你的复杂性将变成m*n*log(n),其中m是列表的平均大小. (2认同)

Nic*_*las 8

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