私は次のクラスを書きました:
_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());
_
このソート方法の複雑さは何ですか?
コレクションの並べ替えに関するドキュメントを読むこともできますが、ここにあります。
ソートアルゴリズムは変更されたマージソートです(下位サブリストの最上位要素が上位サブリストの最下位要素よりも小さい場合、マージは省略されます)。このアルゴリズムは、n log(n)のパフォーマンスを保証します。
コンパレーターは、コレクション内のループで何かを行わない限り、この複雑さを変更しません。
APIでそれを見つけたはずです: n log(n) 。
Collections.sortから取得-
ソートアルゴリズムは変更されたマージソートです(下位サブリストの最上位要素が上位サブリストの最下位要素よりも小さい場合、マージは省略されます)。このアルゴリズムは、保証されたn * log(n)パフォーマンスを提供します
誰もが API doc と述べており、私が見つけたより関連性の高い情報をいくつか追加しています。
カスタムコンパレータを提供する場合は、マージソートの修正バージョン(timsort
とも呼ばれます)が使用されます。実装は pythonのリストソート から借用されています。
最良の場合、必要な比較はn-1であるため、best case is O(n)
およびguaranteed performance in all the cases is O(n.lg(n))