web-dev-qa-db-ja.com

Java.util.Collections.sort()メソッドの時間計算量はどれくらいですか?

私は次のクラスを書きました:

_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()メソッドで、「X」フィールドと「angle」フィールドを持ついくつかのオブジェクトを追加するListを作成しました。

次に、以下を使用します。

_Collections.sort(list, new SortingObjectsWithAngleField());
_

このソート方法の複雑さは何ですか?

20
user472221

コレクションの並べ替えに関するドキュメントを読むこともできますが、ここにあります。

ソートアルゴリズムは変更されたマージソートです(下位サブリストの最上位要素が上位サブリストの最下位要素よりも小さい場合、マージは省略されます)。このアルゴリズムは、n log(n)のパフォーマンスを保証します。

コンパレーターは、コレクション内のループで何かを行わない限り、この複雑さを変更しません。

35
Jan Thomä

APIでそれを見つけたはずです: n log(n)

8
Nicolas

Collections.sortから取得-

ソートアルゴリズムは変更されたマージソートです(下位サブリストの最上位要素が上位サブリストの最下位要素よりも小さい場合、マージは省略されます)。このアルゴリズムは、保証されたn * log(n)パフォーマンスを提供します

2
LiorH

誰もが API doc と述べており、私が見つけたより関連性の高い情報をいくつか追加しています。

カスタムコンパレータを提供する場合は、マージソートの修正バージョン(timsortとも呼ばれます)が使用されます。実装は pythonのリストソート から借用されています。

最良の場合、必要な比較はn-1であるため、best case is O(n)およびguaranteed performance in all the cases is O(n.lg(n))

0
avp