堆的数据结构
堆排序所利用的数据结构就是完全二叉树,其定义为除了最后一层外,其他各层的节点数都达到最大,并且最后一层的节点都连续集中在最左边。如果最后一层的节点数也达到最大,那么次完全二叉树也是满二叉树。
graph TB 1 --> 2 1 --> 3 2 --> 4 2 --> 5 3 --> 6 3 --> 7 4 --> 8 4 --> 9
而堆的概念是建立在完全二叉树之上的,每个节点的值均大于其左右子节点值的完全二叉树为大顶堆,而每个节点的值均小于其左右子节点值的完全二egq叉树为小顶堆。
graph TB subgraph 大顶堆 5 --> 3 5 --> 4 3 --> 1 3 --> 2 end subgraph 小顶堆 6 --> 7 6 --> 8 7 --> 9 7 --> 10 end
堆排序算法思路
假设待排序样本为[4, 7, 5, 3, 1, 0, 2]
将样本构建为大顶堆
将根结点(堆顶)与最后一个节点交换
重新调整堆
重复步骤 2、3
Go代码实现
1 | /** |