一尘不染

在插入项目或将它们添加到已排序列表之后对列表进行排序是否更快?

algorithm

如果我有一个排序列表(比如说要进行排序的快速排序),如果我要添加很多值,那么最好暂停排序并将其添加到末尾,然后进行排序,或者使用二进制印章正确地放置项目添加它们。如果项目是随机的,或者已经或多或少地按顺序排列,会有所不同吗?


阅读 222

收藏
2020-07-28

共1个答案

一尘不染

如果添加了足够多的项以有效地从头开始构建列表,则应该可以通过对列表进行排序来获得更好的性能。

如果项目大部分是按顺序排列的,则可以调整增量更新和常规排序以利用这一点,但是坦率地说,通常不值得这样做。(您还需要小心一些事情,例如确保某些意外排序不会使您的算法花费
更长的时间 ,qv天真的quicksort)

增量更新和常规列表排序都为O(N log
N),但是之后可以得到更好的常量因子对所有内容进行排序(我在这里假设您拥有一些辅助数据结构,因此您的增量更新可以比O更快地访问列表项(N)…)。一般而言,一次进行全部排序比增量维护顺序具有更多的设计自由度,因为增量更新必须始终保持完整的顺序,而一次全部批量排序则不需要。

如果没有别的,请记住,有很多高度优化的批量排序可用。

2020-07-28