当我阅读 CLRS 书中的以下行时,我正在复习我的算法:
Like insertion sort, but unlike merge sort, heap sort sorts in place: only a constant number of array elements are stored outside the input array at any time.
这是指合并排序用于分而治之的左右子列表吗?
如果是,我们能否以某种方式增强合并排序算法以跳过创建这些子列表?
最佳答案
归并排序确实需要一些工作空间:
以上所有都需要一些与成正比的工作空间。否 ,因此空间复杂度为 O(N) ,比插入排序、堆排序、shell排序和快速排序差很多。
请注意,应用于列表的归并排序不需要 O(N) 空间,而是 O(log N) 空间,要么用于自顶向下实现中的递归调用,要么用于迭代自底向上实现的子列表指针数组。然而额外的 O(N) 数据结构中已经存在空间来存储
next
指针。
关于sorting - HeapSort 与 MergeSort 空间复杂度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29829916/