堆排序是指利用堆这种数据结构所设计的一种排序算法。堆是一个近似完全二叉树的结构,并同时满足堆的性质:子节点的值总是小于(或大于)它的父节点。堆排序可以说是一种利用堆的概念来排序的选择排序。分为两种方法:
- 大顶堆:每个节点的值都大于或等于其子节点的值,在堆排序算法中用于升序排列;
- 小顶堆:每个节点的值都小于或等于其子节点的值,在堆排序算法中用于降序排列;
算法步骤
- 使用未排序数列构建一个堆H[0……n-1];
- 将堆首和堆尾互换;
- 把堆的尺寸缩小1,并重新调整堆数据,使其满足堆的性质;
- 重复步骤2-3-2-3….,直到堆的尺寸为1;
动图演示
代码实现
1 | template <typename T> |