创作不易,来了的客官点点关注,收藏,订阅一键三连❤😜

前言
程序=数据结构+算法,算法是数学理论和工程实现的杂糅,是一个十分有趣神奇的学问。搞懂算法用另一种视角看编程,又会是一种全新的感受,如果你也在学习算法,不妨跟主任萌新超差一起学习,拿下算法!
系列文章目录
python每日算法 | 图文结合详解快速排序,手撕快排代码!
python每日算法 | 图文挑战十大排序算法DAY1,再也不用担心面试官问冒泡、选择、插入排序!
python每日算法 | 实现四大查找算法,生动形象,保证一看就会!
概述
本期的内容将介绍十大排序算法之堆排序,通过本期内容你不仅能知道代码堆排序如何用python实现,还将学会使用堆排序模块以及用堆排序解决topk问题等等!再也不用担心面试官问堆排序是什么啦!
目录
超超python每日算法思维导图

堆排序
了解树
树是一种可以递归定义的数据结构,树结构是递归定义的,树是由n个节点组成的集合:
如果n=0,那这是⼀一棵空树;
如果n>0,那存在1个节点作为树的根节点,其他节点可以分为m个集合,每个集合本身又是一棵树。

关于树的⼀些概念
根节点:一棵树中,没有双亲结点的结点,例如图中的A
节点的度:一个节点含有的子树的个数称为该节点的度,例如D节点的度为1(H),E节点的度为2(I,J)
树的度:一棵树中,最大的节点的度称为树的度,例如图片中树的度为A节点的6
树的高度或深度:树中节点的最大层次,图片的高度位4
叶子节点或终端节点:度为0的节点称为叶节点;即不能分叉的点,例如B、C、H、I、P等
双亲节点或父节点:若一个节点含有子节点,则这个节点称为其子节点的父节点,E是I的父节点
孩子节点或子节点:一个节点含有的子树的根节点称为该节点的子节点,I是E的孩子节点
节点的层次:从根开始定义起,根为第1层,根的子节点为第2层,以此类推
森林:由m(m>=0)棵互不相交的树的集合称为森林
了解二叉树

二叉树:度不超过2的树,每个节点最多有两个孩子节点,两个孩子节点被区分为左孩子节点和右孩子节点
满二叉树与完全二叉树

满二叉树:⼀个⼆叉树,如果每一个层的结点数都达到最⼤大值,则这个二叉树就是满二叉树。
完全二叉树:叶节点只能出现在最下层和次下层,并且最下⾯面一层的结点都集中在该层最左边的若⼲干位置的二叉树
二叉树的存储方式
链式存储方式(后续算法了解)
顺序查找方式:

从图片中,我们发现:
父节点和左孩子节点的编号下标有什关系?
0-1 1-3 2-5 3-7 4-9(列表中的下标)
i → 2i+1
父节点和右孩子节点的编号下标有什么关系?
0-2 1-4 2-6 3-8 4-10(对应列表中的下标)
i → 2i+2
因此得到以下规律:
已知双亲的下标,则左孩子的下标为:Left=2parent+1,则右孩子的下标为:Right=2parent+2;
已知孩子结点(不区分左右)的下标,则双亲的下标为:(child-1)//2
什么是堆
堆:堆是一种特殊的完全二叉树结构,分为大根堆和小根堆
大根堆:一棵完全⼆叉树,满足任一节点都比其孩子节点大
小根堆:一棵完全⼆叉树,满足任一节点都比其孩子节点小

本文详细介绍了堆排序的原理和过程,包括树的概念、二叉树、堆的构造和调整,以及如何使用Python实现堆排序。堆排序时间复杂度为O(nlogn),并可用于解决TopK问题。文章还对比了堆排序与其他排序算法的效率,并提供了Python代码示例。
最低0.47元/天 解锁文章
4756

被折叠的 条评论
为什么被折叠?



