就地合并排序实际用法

时间:2016-06-06 00:44:46

标签: c++ std mergesort in-place

我试着在这里搜索到什么地方合并排序以及我需要在哪里使用它?但没有找到一个直接的答案。请在下面回答我的帮助。

1)何时何地需要就地合并?就地合并的实际用法。

2)如果对就地合并的输入数组没有排序会发生什么?

3)在合并排序,就地合并排序和快速排序中,哪些内存需要更多内存?

注意:我问的是" std :: inplace_merge"这是一个stl算法。

1 个答案:

答案 0 :(得分:2)

1)当您想要使用比标准mergesort更少的空间在O(nlogn)时间内对列表进行排序时,使用就地合并排序。

2)排序的整个目的是使输入数组排序,因此未排序的输入数组将按就地合并排序进行排序。

3)Mergesort使用更多内存,因为它为两个递归调用创建了两个半长的新数组。就地合并排序和快速排序应该占用相同的空间,因为它们都是就地的。对于mergesort,就地意味着O(log n)额外空间保持长度为n的数组的相关索引,而不是就地的最严格的O(1)含义。 Quicksort在最坏的情况下需要O(nlogn)额外空间,因为可以有O(n)个递归调用,每个调用都有指针占用空间O(logn)。

希望这有帮助。