如果我有两个数字列表,为了能够获得单个排序列表,我应该首先对各个列表进行排序然后进行合并排序,还是应该将两个列表合并为一个列表然后应用有效的排序算法?
答案 0 :(得分:3)
你可以用任何一种方式论证;这取决于很多因素:
列表A和B的选项是:
如果A和B的大小几乎都是有序的,那么就可以在两者上做一些在几乎排序的列表上快速工作的东西,比如插入排序。然后你进行合并,这需要线性时间,使选项(2)接近线性。但在这种情况下,如果每个列表中的值范围相似,则选项(1)将不会很好,留下一些可能为O(n log n)的东西,假设您的值不适合基数或计数分类。也就是说,对于许多排序算法,较长的列表会因为数据移动距离较长而受到损害。
现在我们可能会提出选项(1)更好的案例。
但是,如果您发现选项(2)在您的情况下总是更好,那么不意味着您应该天真地应用递归拆分和合并方法,因为这样做会产生开销。
但是,正如所有关于“哪种排序方法更好”的问题一样,你真的要看一下:
简而言之,“它取决于”,但如果列表已经拆分并且您的排序算法对列表长度敏感,那么您可以从选项(2)中获得一些好处。
答案 1 :(得分:0)
如果它们尚未排序,我只需将它们组合起来进行一次排序。如果单独对它们进行排序然后进行合并排序更有效,那么最有效的排序算法将以这种方式构建:任意将列表拆分为两个,单独排序并合并。但事实并非如此,那就是.......