【发布时间】:2017-01-04 18:09:17
【问题描述】:
由于在 C++ 中数组是通过引用传递的,归并排序(递归)的空间复杂度仍然保持 O(n) 吗?如果是,那为什么? (我认为由于数组的元素没有被复制,所以空间复杂度应该是恒定的,即 O(k)。)
【问题讨论】:
-
你从哪里得知数组是通过引用传递的?
-
@NathanOliver 默认情况下,c++ 通过引用传递数组
-
这不是真的。默认情况下,当将数组传递给函数时,会传递指向数组第一个元素的指针。要通过引用传递数组,您将拥有类似
void foo(int (&arr)[10]) -
我理解你的意思,但事实仍然是没有分配额外的内存,所以我们可以说对于 c++ 合并排序的空间复杂度是恒定的吗?
-
进行就地合并排序是可能的,但很复杂:stackoverflow.com/questions/2571049/…。但是,它与 C++ 数组传递无关。一般来说,在分析算法时,总是假设数据是“通过引用”传递的,而不是在 O(N) 中复制。
标签: c++ algorithm sorting c++14