IComparableのようなものを.NETに実装するときに、.NETが実際に基になるデータを並べ替えるために使用する並べ替えアルゴリズムを教えてください。また、使用されるアルゴリズムはカスタマイズ可能または選択可能ですか?
2 に答える
2つの大きな問題があります。
Array.Sort
(配列をインプレースでソートします)は不安定な クイックソートを使用します。
List<T>.Sort
これは、MSDNのドキュメントによると、によって内部的に使用されているのと同じ実装です。
このメソッドは
Array.Sort
、QuickSortアルゴリズムを使用するを使用します。
このEnumerable.OrderBy<TSource, TKey>
メソッド(入力シーケンスのコピーをソートする)は、安定したクイックソートを使用します。
私の知る限り、.NETBCLの2つの並べ替えの実装はこれらだけです。
MSDNのドキュメントには、使用される並べ替えアルゴリズムはクイックソート(少なくとも配列の場合)であると記載されています-これは選択またはカスタマイズできません。
使用する並べ替えメソッドを指定するインターフェイスではなく、IComparable
並べ替えを実行しているメソッドまたはクラス(通常は配列またはリストですが、任意のメソッドでもかまいません)に至るまで、たとえば配列とリストで完全に可能であることに注意してください。完全に異なるアルゴリズムを使用してソートする(実際には両方ともクイックソートを使用しますが)
これは、本当に必要な場合は、代替アルゴリズムを使用して独自の並べ替え方法を実装できることを意味します。