如果我有一个排序列表(比如说要进行排序的快速排序),如果我要添加很多值,那么最好暂停排序并将其添加到末尾,然后进行排序,或者使用二进制印章正确地放置项目添加它们。如果项目是随机的,或者已经或多或少地按顺序排列,会有所不同吗?
如果添加了足够多的项以有效地从头开始构建列表,则应该可以通过对列表进行排序来获得更好的性能。
如果项目大部分是按顺序排列的,则可以调整增量更新和常规排序以利用这一点,但是坦率地说,通常不值得这样做。(您还需要小心一些事情,例如确保某些意外排序不会使您的算法花费 更长的时间 ,qv天真的quicksort)
增量更新和常规列表排序都为O(N log N),但是之后可以得到更好的常量因子对所有内容进行排序(我在这里假设您拥有一些辅助数据结构,因此您的增量更新可以比O更快地访问列表项(N)…)。一般而言,一次进行全部排序比增量维护顺序具有更多的设计自由度,因为增量更新必须始终保持完整的顺序,而一次全部批量排序则不需要。
如果没有别的,请记住,有很多高度优化的批量排序可用。