基于堆栈的合并排序C.

时间:2015-03-22 08:08:22

标签: c

我在将基于递归的合并排序转换为基于堆栈的合并排序时遇到问题。在函数中进行双递归调用会让我失望。我不确定我该怎么办呢。

1 个答案:

答案 0 :(得分:1)

您可以迭代地实现mergesort,合并2 ^ k个元素的相邻切片,从k = 0到2 ^ k> = n。它非常简单,不需要递归算法的堆栈转换

您需要额外的空间来执行此操作,通常与数据集的大小相同。您可以使用malloc分配此空间,或者如果不是太大(基于堆栈的分配),则使用自动存储。但是这个内存要求类似于递归实现。

如果元素的总数不是2的幂,则合并2 ^ k个元素的片段效率稍差,并且它执行更多比较并使用高达两倍的内存但总体复杂度仍为O(n * log (n))在最坏的情况下,一个聪明的实现可以将它降低到O(n)的排序情况。

尝试这种方法,我会在您展示自己的尝试后发布一些代码。