Я использую Linq и Lambda Operations в своих проектах, и мне нужно было отсортировать List по двум свойствам класса. Поэтому я использовал методы 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);
...
В Это ответ объясняется тем, что OrderBy() использует Quicksort, поэтому даже если он имеет среднюю временную сложность O (N * logN), для худшего случай, временная сложность вокруг O (N 2). Если также метод ThenBy() имеет худшую временную сложность O (N 2), было бы бессмысленно использовать эти методы.
Используется ли метод ThenBy() Quicksort? Если да, означает ли это, что для тех же "v.Value" s "v.Index" сортируются с наихудшей сложностью O (N 2)?