辅助空间与堆排序空间复杂度的区别?

时间:2017-06-01 07:43:52

标签: algorithm sorting heapsort space-complexity

  

堆排序的辅助空间和空间复杂度之间的区别?

我的尝试:

正如here所说:

如果我们想要在空间的基础上比较标准排序算法,那么辅助空间将是比空间复杂度更好的标准。合并排序使用O(n)辅助空间,插入排序和堆排序使用O(1)辅助空间。所有这些排序算法的空间复杂度都是O(n)。

我用Google搜索了Heap Sort的空间复杂度,我发现空间复杂度为O(1)。

我的问题是:

  

这个解释是否正确?辅助空间和空间复杂性有什么区别?

1 个答案:

答案 0 :(得分:5)

辅助应该用于所有未用于存储原始输入的内存。

堆排序输入是一个无序元素的数组,它的工作方式是将它们重新排列到位意味着没有(或者它的常量,即不依赖于输入数组的大小)辅助空间使用(堆是使用输入数组构建的 - http://www.algostructure.com/sorting/heapsort.php)。

谈到空间复杂性时,您还应该考虑输入和辅助空间使用的空间,因此从这个意义上说,堆排序的空间复杂度为O(n)+O(1)n用于输入和1作为辅助空间)。 如果你想要公平,你也可以考虑堆栈上使用的空间(堆排序的递归实现使用该空间,尽管它应该只有O(logn),see here for more details)。

顺便说一句, merge-sort 的辅助空间也可以是O(1),因为存在一个 merge-sort 版本,它对数组进行排序( How to sort in-place using the merge sort algorithm?)。