稳定排序算法对元素进行排序,使得输入中重复元素的顺序在输出中也保持不变。
堆排序涉及两个步骤:
- 堆创建
- 从堆树中删除根元素并将其添加到将按顺序排序的新数组中
1.堆创建期间的订单中断
假设输入数组是 {1, 5, 2, 3, 2, 6, 2},为了查看 2 的顺序,假设它们是 2a、2b 和 2c,所以数组是 {1 , 5, 2a, 3, 2b, 6, 2c}
现在,如果您从中创建一个堆(此处为最小堆),它的数组表示将是 {1, 2b, 2a, 3, 5, 6, 2c},其中 2a 和 2b 的顺序已经改变。
2。删除根元素期间的顺序中断
现在,当我们必须从堆中删除根元素(在我们的例子中为 1)以将其放入另一个新数组时,我们将其与最后一个位置交换并从那里删除,因此将堆更改为 {2c, 2b , 2a, 3, 5, 6}。我们重复相同的操作,这次我们将从堆中删除“2c”并将其放在我们放置“1”的数组末尾。
当我们完成重复此步骤直到堆为空并且每个元素都转移到新数组时,新数组(已排序)看起来像 {1, 2c, 2b, 2a, 3, 5, 6}。
堆排序的输入: {1, 5, 2a, 3, 2b, 6, 2c} --> 输出: {1, 2c, 2b, 2a, 3, 5, 6}
因此我们看到重复元素(2)在堆排序数组中的顺序与它们在输入中出现的顺序不同,因此堆排序不稳定!