我经常遇到的一个决定是何时对项目列表进行排序。添加项目时,始终对列表进行排序,或者访问列表时。
是否有提高性能的最佳做法,或者只是说:如果主要访问列表,则在更改时对其进行排序,反之亦然。
答案 0 :(得分:1)
答案很大程度上取决于。您应该分析并应用最适合您案例的策略。
如果你想要访问/查找元素的性能,一个好的决定是使用InsertionSort维护列表(http://en.wikipedia.org/wiki/Insertion_sort)。
访问时的排序列表可能仅适用于某些非常特殊的场景,多次插入,低访问和性能不是很重要。
但是,还有许多其他选项:比如维护一个说“list is sorted”的var,并在每次第n次插入,空闲或访问时排序(如果需要)。
答案 1 :(得分:1)
我习惯这样思考:
O(n log n)
加上复杂性填充,这通常比添加元素时的排序更快)答案 2 :(得分:1)
在每个访问点对列表进行排序是一个坏主意。您必须拥有一个在修改集合时设置的标志。只有设置了此标志,您才需要排序然后重置标志。
但最好的情况是,如果您的数据结构按定义始终排序。这意味着,如果插入一个新元素,该元素将自动插入到右侧索引中,从而保持对该集合的排序。
我不知道您使用的是哪个平台/框架。我知道.NET提供了一个SortedList类,它可以为你管理那种插入排序算法。