算法练习介绍8.3-2理解稳定性

时间:2016-07-16 02:13:53

标签: algorithm sorting design-patterns

当我得到答案时: http://clrs.skanev.com/08/03/02.html进行练习8.3-2, 我无法理解如何专门使用索引来解决它。 有人可以一步一步地说明或解释为什么是Θ(n)?

以下是问题和答案:

以下哪种排序算法是稳定的:插入排序,合并排序,堆栈和快速排序?给出一个简单的方案,使任何排序算法稳定。你的计划需要多少额外的时间和空间?

稳定:插入排序,合并排序

不稳定:Heapsort,quicksort

我们可以通过将数组映射到对数组来使任何算法稳定,其中每对中的第一个元素是原始元素,第二个元素是其索引。然后我们按字典顺序排序。该方案需要额外的Θ(n)空间。

1 个答案:

答案 0 :(得分:0)

在排序的上下文中,“stable”表示当对包含具有等效值的某些元素的集合进行排序时,这些元素相对于彼此保持相同的顺序。

因此,通过存储每个元素的原始索引,并使用该索引作为对具有相等主值的元素进行排序的次要方法,可以使排序算法稳定。

为了实现这一点,将实现比较功能(例如<) 所以A<如果A.PrimarySortValue< B,则返回true。 B.PrimarySortValue,并在A.PrimarySortValue == B.PrimarySortValue时返回(A.OrginalIndex< B.OriginalIndex)。否则(当A.PrimarySortValue> B.PrimarySortValue时)它返回false;

这需要为每个元素存储一个额外的OriginalIndex值。有n个元素因此需要Θ(n)额外空间。