如何通过Python实例演示堆排序算法的原理与实现?
- 内容介绍
- 文章标签
- 相关推荐
本文共计867个文字,预计阅读时间需要4分钟。
堆排序+堆是一种完全二叉树(除了最后一层,其他每一层都被完全填充,所有节点都向左对齐),首先需要了解概念:最大堆问题,最大堆就是根节点比子节点都大,且满足堆的性质。
堆排序
堆是一种完全二叉树(是除了最后一层,其它每一层都被完全填充,保持所有节点都向左对齐),首先需要知道概念:最大堆问题,最大堆就是根节点比子节点值都大,并且所有根节点都满足,那么称它为最大堆。反之最小堆。
当已有最大堆,如下图,首先将7提出,然后将堆中最后一个元素放到顶点上,此时这个堆不满足最大堆了,那么我们要给它构建成最大堆,需要找到此时堆中对打元素然后交换,此时最大值为6,符合最大堆后,我们将6提取出来,然后将堆中最后一个元素放到堆的顶部...以此类推。最后提取的数值7,6,5,4,3,2,1
那么在维护一个最大堆过程中,最多进行交换次数决定了此算法复杂度,但交换次数与树的高度有关:
h=log2(n+1)h=log2(n+1)
最大堆生成:根据最大堆特性(任意一个根节点都大于叶子节点)不满足就调换。
本文共计867个文字,预计阅读时间需要4分钟。
堆排序+堆是一种完全二叉树(除了最后一层,其他每一层都被完全填充,所有节点都向左对齐),首先需要了解概念:最大堆问题,最大堆就是根节点比子节点都大,且满足堆的性质。
堆排序
堆是一种完全二叉树(是除了最后一层,其它每一层都被完全填充,保持所有节点都向左对齐),首先需要知道概念:最大堆问题,最大堆就是根节点比子节点值都大,并且所有根节点都满足,那么称它为最大堆。反之最小堆。
当已有最大堆,如下图,首先将7提出,然后将堆中最后一个元素放到顶点上,此时这个堆不满足最大堆了,那么我们要给它构建成最大堆,需要找到此时堆中对打元素然后交换,此时最大值为6,符合最大堆后,我们将6提取出来,然后将堆中最后一个元素放到堆的顶部...以此类推。最后提取的数值7,6,5,4,3,2,1
那么在维护一个最大堆过程中,最多进行交换次数决定了此算法复杂度,但交换次数与树的高度有关:
h=log2(n+1)h=log2(n+1)
最大堆生成:根据最大堆特性(任意一个根节点都大于叶子节点)不满足就调换。

