显示堆排序重复比较
Show heapsort repeats comparisons
如何证明堆排序重复了之前进行的比较? (即它会执行之前已经完成的比较)
谢谢
这两个元素可能在构建堆步骤(heapify)中进行比较,也可能在堆排序的重新排序步骤中进行比较。这是the wiki。
例如,按最大堆排序:
- 原始数组:4 6 10 7 3 8 5
heapify
通过 shift-up
.
到一个新的堆数组
比较:4<6、6<10、4<7、6<8
(10) (7 8) (4 3 6 5) // 每层按括号分组
- 重新排序步骤
- 先调后调,大的放在最后
- 将堆大小减少 1
- 使用
shift-down
比较:5<8, 6<7, 3<6, 3<4, 3<5, 3<4
因为,在heapify
中,比较是基于元素的顺序。而在heapify
之后,顺序可能也没有排序。所以可能还有其他比较。
如何证明堆排序重复了之前进行的比较? (即它会执行之前已经完成的比较) 谢谢
这两个元素可能在构建堆步骤(heapify)中进行比较,也可能在堆排序的重新排序步骤中进行比较。这是the wiki。
例如,按最大堆排序:
- 原始数组:4 6 10 7 3 8 5
heapify
通过shift-up
.
到一个新的堆数组 比较:4<6、6<10、4<7、6<8 (10) (7 8) (4 3 6 5) // 每层按括号分组- 重新排序步骤
- 先调后调,大的放在最后
- 将堆大小减少 1
- 使用
shift-down
比较:5<8, 6<7, 3<6, 3<4, 3<5, 3<4
因为,在heapify
中,比较是基于元素的顺序。而在heapify
之后,顺序可能也没有排序。所以可能还有其他比较。