在合并排序的最后一步,我们有两个排序列表,我们试图将它们组合成一个排序列表,逻辑将如何进行?
这就是我天真的想法: 获取列表#1的每个元素,并将其与列表#2的每个元素进行比较,并在列表#2中找到它的位置。基本上就像插入排序。
但显然这不是它发生的原因,因为这给了我O(n ^ 2)的复杂性。 但合并排序是O(nlogn)。那么最后一步是如何发生的?
答案 0 :(得分:1)
它使用合并排序。合并排序没有单独的排序算法,它是一种排序算法。
因此您的原始列表已经排序,因此最小元素始终位于开头。比较A和B.取两者中的较小者并将其添加到结果列表的末尾。重复,直到两个源列表都为空。
答案 1 :(得分:0)
这在很大程度上取决于您如何构建您正在排序的数据。
合并排序主要用于外部排序,例如在磁盘上排序文件。在这种情况下,您通常从一些输入文件中获取输入,并将结果写入单独的输出文件。
如果您要对链表进行排序,通常会做同样的事情 - 获取N个输入列表并生成一个输出列表。由于只需操作链接就可以将元素从一个列表移动到另一个列表,因此不需要(多)额外的存储空间或时间。
您似乎真的在询问有关排列数组的问题。如果你想在适当的位置合并排序数组, couple已知algorithms,但它们有点不重要。
[我不喜欢只使用链接到我猜的是真正的答案,但是这些算法在这里尝试甚至大概有点多了。]