个人主页:仍有未知等待探索-CSDN博客 专题分栏:数据结构_仍有未知等待探索的博客-CSDN博客 欢迎大家来指教! 一、前言 今天要介绍的是堆排序。 首先什么是堆?简而言之,堆就是二叉树的数组形式,用数组来存储二叉树。 这个堆和C语言中讲的堆区是不同的两个概念,不要混淆。 二、堆排序 堆排序的核心就是构建一个特殊的二叉树,这个二叉树的特性是:其父节点大于等于(小于等于)其左右孩子结点。 故,最终创建的二叉树的根节点会是该二叉树的最大值(最小值)。 那怎么才能让整个数组中的数据有序呢?那我们就让数组中第一个数和最后一个数进行交换,然后以第一个数和倒数第二个数为端点,继续进行构建堆,然后选出次最小值。以此类推~~~ 我以大根堆为例(从数组下标为1的地方开始存储): typedef int HpDataType; typedef struct Heap { HpDataType* a;//进行存储堆中的数据 int size;//该堆的有效数据个数 int capacity;//该堆中的容量 }Hp; //初始化 void Heapinit(Hp* php) {...