【发布时间】:2011-03-18 04:16:03
【问题描述】:
我遇到了以下问题。
给定一个由 n 个元素组成的数组和一个整数 k,其中 k n。元素 {a0...ak} 和 {ak+1...an sub>} 已经排序。给出一个在 O(n) 时间和 O(1) 空间内排序的算法。
在我看来,它似乎不能在 O(n) 时间和 O(1) 空间内完成。问题似乎真的是在询问如何就地进行合并排序的合并步骤。如果可能的话,合并排序不会以这种方式实现吗?我无法说服自己,需要一些意见。
【问题讨论】:
-
这个问题是否特别说明了合并排序?我知道可以就地合并排序,但不是在 O(n) 时间内(至少我从未听说过。)
-
不,它没有。我正在类比合并步骤。看起来确实很相似。
-
如果您发布了问题的确切措辞,那么它似乎与归并排序没有任何关系。对于预先排序的数组(即插入排序),存在 O(1) 空间和 O(n) 就地排序算法。 Mergesort 不是其中之一,众所周知,它不是其中之一,所以...
-
那么你将如何在 O(n) 时间内解决这个问题?什么想法?可能你没有得到问题这里是一个例子...... {1,3,5,8} 和 {2,4,6,9} .. 你所暗示的是一个完全预排序的数组,它不是我的问题的情况。无论如何,对已经排序的数组进行排序是没有意义的。
标签: arrays algorithm sorting mergesort space-complexity