我在我的项目中使用Linq和Lambda操作,需要按照类的两个属性对列表进行排序。因此,我使用了如下的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()使用的是快速排序算法,因此即使它的平均时间复杂度为O(N*logN),在最坏情况下,时间复杂度也约为O(N2)。如果ThenBy()方法的最坏时间复杂度也是O(N2),那么使用这些方法将毫无意义。ThenBy()方法是否也使用快速排序算法?如果是,这是否意味着对于相同的“v.Value”,“v.Index”会以O(N2)的最坏时间复杂度进行排序?
O(1)
的,因为它仅构造查询,而不执行查询。而且,当查询被执行时,ThenBy
不会导致额外的排序,它只是修改已经排队的排序条件。 - user4003407O(1)
,因为它的执行是不同的。当你需要它的时候才使用它,它的时间复杂度是O(nlogn)
。 - M.kazem Akhgary