プロジェクトでLinqとLambdaOperationsを使用しており、クラスの2つのプロパティに従ってリストを並べ替える必要がありました。したがって、次のようにOrderBy()。ThenBy()メソッドを使用しました。
class ValueWithIndex{
public long Value;
public int Index;
}
...
List<ValueWithIndex> valuesWithIndex = new List<ValueWithIndex>();
for (int i = 0; i < A.Length; i++){
ValueWithIndex vi = new ValueWithIndex();
vi.Value = A[i];
vi.Index = i;
valuesWithIndex.Add(vi);
}
var orderedValues = valuesWithIndex.OrderBy(v => v.Value).ThenBy(v => v.Index);
...
This の回答では、OrderBy()はQuicksortを使用するため、O(N * logN)の平均時間の複雑さがあるとしても、最悪の場合、時間の複雑さはO(N2)。 ThenBy()メソッドの時間計算量がO(N2)、これらの方法を使用することは無意味です。
ThenBy()メソッドもクイックソートを使用していますか?はいの場合、同じ「v.Value」に対して「v.Index」がO(N)でソートされることを意味しますか?2)最悪の時間計算量?
LINQ OrderBy(...).ThenBy(...)...ThenBy(...)
メソッドチェーンは、単一ソート操作を複数のソートキー(マルチキー比較器を使用)で形成します。
したがって、チェーンに含めるThenBy(Descending)
メソッドの数に関係なく、ソート操作の時間計算量は、QuickSort O(N * logN)平均/ O(N2) 最悪の場合。もちろん、追加するキーが増えると、2つのオブジェクトの比較に時間がかかりますが、並べ替え操作の複雑さは変わりません。