【发布时间】:2012-09-17 16:37:54
【问题描述】:
根据the docsList<T>.Sort使用快速排序算法。我听说如果没有明智地选择枢轴,当在预排序列表上调用时,这可能会表现出最差的性能。
QuickSort 的 .NET 实现是否会在预排序列表上遇到最坏情况?
就我而言,我正在编写一个将对列表进行一些处理的方法。需要对列表进行排序才能使该方法起作用。在大多数使用情况下,列表将通过已经排序,但对顺序进行一些小的更改并非不可能。我想知道在每个方法调用上重新排序列表是否是个好主意。不过很明显,我掉进了premature optimization 的陷阱。
【问题讨论】:
-
或者我应该在排序之前随机化列表?
-
.NET 实现无法避免最坏的情况,因为这只是快速排序算法的一个特征。
-
什么会导致您认为您的数据已排序?还是几乎排序?您能否根据这些标准做出决定?
-
@dlev 当列表被构建时,它会被正确排序,但是在那之后没有什么可以阻止另一个方法调用
Add。 -
@RichardTowers 在这种情况下,也许您应该阻止其他方法破坏已排序的属性。您可以限制对列表的直接访问,并通过维护排序不变量的方法来调解访问。然后您可以跳过“检查排序然后排序”步骤,因为您可以始终对排序充满信心。这是你的清单;你有权力!
标签: c# performance quicksort