Skip to content

堆排序

[!quote] 堆排序 堆排序 是一种利用二叉堆实现的排序算法。

  • 核心思想:把一个无序数组构造成一个堆结构,使之有序
  • 步骤
    • 将数组构建成堆
    • 跟据某种规则下沉非叶子节点,重新调整堆
    • 一直重复,直到满足二叉堆
  • 构建最大堆
1. 原数组 [4, 10, 3, 5, 1]
        4
       / \
     10   3
    / \
   5   1

2. 找到最后一个非叶子节点,也就是10,其左子节点5,和右子节点1都小于本身10,所以不动
3. 再往上找非叶子节点,也就是4,其左子节点10大,所以我们交换4和10,变成 [10, 4, 3, 5, 1]
	10
   /  \
  4    3
 / \
5   1

4. 重复这个过程
5. 已经满足最大堆的规则了,构建完成 [10, 5, 3, 4, 1]
        10
       /  \
     5     3
    / \
   4   1