堆排序之Python实现
目录 python算法之堆排序 堆的概念: 堆的类型 堆排序步骤 构建完全二叉树 构建大顶堆 排序 总结 代码实现 python算法之堆排序 注意:本文中的结点和结点不加区分的使用 堆的概念: 堆是一个完全二叉树 每个非叶子结点都要大于或者等于其左右孩子结点的值称为大顶堆 每个非叶子结点都要小于或者等于其左右孩子结点的值称为小顶堆 根结点一定是大顶堆中的最大值,一定是小顶堆中的最小值 堆其实是从节点值来观察,结点值具有一点特点的完全二叉树 堆的类型 根据堆的特性,我们可以把堆分为两类 大顶堆 完全二叉树的每个非叶子结点都大于或者等于其左右孩子结点的值,根结点一定是大顶堆中的最大值, 如图1 小顶堆 每个非叶子结点都要小于或者等于其左右孩子结点的值,根结点一定是大顶堆中的最小值, 如图2 堆排序步骤 构建完全二叉树 原始数据:30,20,80,40,50,10,60,70,90 构建一个完全二叉树存放数据,并根据完全二叉树的性质5对元素编号,: 放入顺序的数据结构中构造一个列表为[0,30,20,80,40,50,10,60,70,90](插入一个0,是为了将数组的下标和完全二叉树的结点编号一致),如下图 构建大顶堆 怎么将一个队列构建成大顶堆(或者小顶堆),是堆排序的 算法核心部分 分析 1.度数为2的结点A,如果他的左右孩子结点的最大值比它大的,最大值和该结点交换 2