【发布时间】:2016-04-19 05:49:13
【问题描述】:
我看过一些java中合并排序的实现,似乎拆分部分通常是通过创建2个新数组,左右并将左右部分分别复制到这些数组来完成的。
我的问题是:这仍然给了我们 nlogn 时间,对吗?因为现在每个拆分将有 n+n 时间(拆分数组的 n 时间,合并数组的 n 时间)并且有 logn 拆分,所以我们有 2nlogn,它仍然是 nlogn。这是正确的吗?
【问题讨论】:
-
是的。 O(2n logn) 仍然是 O(n logn)。
-
另外,数组分割发生在原地。本身不是新数组。
-
我正在尝试实现就地数组划分,但它看起来有点乱。您需要跟踪原始数组的开始和结束索引,对吗?实现起来似乎并不太难,但与只创建一个新的左数组和一个新的右数组相比,它肯定会出现更多错误。
-
@Kevin 我明白了。但这就是所谓的优化。
-
可惜主流语言没有数组切片D Slices