python数据结构算法DAY3| 堆排序

本文介绍了堆排序的概念,包括什么是堆、堆的向下调整性质,详细解释了堆排序的思路和过程。堆排序是一种利用堆的数据结构进行排序的算法,时间复杂度为O(nlogn)。此外,还讨论了堆排序如何解决topk问题,以及堆排序与其他排序算法的效率比较。文章最后提到了稳定性和归并排序的基本原理。
摘要由CSDN通过智能技术生成

目录

前言

1.什么是堆排序?

堆的向下调整性质

2.堆排序思路

3.堆排序代码

python中堆排序的内置模块

4.堆排序时间复杂度

5.堆排序解决topk问题


前言

堆排序是基于完全二叉树,堆是一种特殊的完全二叉树结构,那什么是树呢?

树是一种可以递归定义的数据结构,树是由n个节点构成的集合:

如果n=0,就是一颗空树;

如果n>0,那就存在一个节点作为树的根节点,其他节点可以分为m个集合,每个集合本身又是一棵树。

关于树的一些概念:

根节点:没有父节点的节点,如上图中A

节点的度:一个节点含有子树(孩子节点)的个数,,上图中F的度就是3(KLM)

树的度:一颗树中,各个节点的度里面取最大值,上图中,树的度为A节点的度,为7

树的高度或深度:就是树的层数,,上图中高度为4

叶子节点或终端节点:度为0的节点成为叶子节点,上图中叶子节点为HIPQ....

双亲节点或父节点:若一个节点含有子节点,则这个节点称为其子节点的父节点,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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值