懂得堆排序算法,就能当架构师!-Testfan打卡学测开1015
Posted 自动化软件测试
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了懂得堆排序算法,就能当架构师!-Testfan打卡学测开1015相关的知识,希望对你有一定的参考价值。
题目内容:什么是堆排序
本期语音讲解
【定义】
n个关键字序列Kl,K2,…,Kn称为(Heap),当且仅当该序列满足如下性质(简称为堆性质):
(1)ki<=k(2i)且ki<=k(2i+1)(1≤i≤ n/2),当然,这是小根堆,大根堆则换成>=号
(2)ki>=k(2i)且ki>=k(2i+1)(1≤i≤ n/2)。k(i)相当于二叉树的非叶子结点,K(2i)则是左子节点,k(2i+1)是右子节点
若将此序列所存储的向量R[1..n]看做是一棵完全二叉树的存储结构,则堆实质上是满足如下性质的完全二叉树:
树中任一非叶子结点的关键字均不大于(或不小于)其左右孩子(若存在)结点的关键字。
【例】关键字序列(10,15,56,25,30,70)和(70,56,30,25,15,10)分别满足堆性质(1)和(2),故它们均是堆,其对应的完全二叉树分别如小根堆示例和大根堆示例所示。
大根堆和小根堆:根结点(亦称为堆顶)的关键字是堆里所有结点关键字中最小者的堆称为小根堆,又称最小堆。根结点(亦称为堆顶)的关键字是堆里所有结点关键字中最大者,称为大根堆,又称最大堆。注意:①堆中任一子树亦是堆。②以上讨论的堆实际上是二叉堆(Binary Heap),类似地可定义k叉堆。
【高度】
堆可以被看成是一棵树,结点在堆中的高度可以被定义为从本结点到叶子结点的最长简单下降路径上边的数目;定义堆的高度为树根的高度。我们将看到,堆结构上的一些基本操作的运行时间至多是与树的高度成正比,为O(logN)。
【算法分析】
堆排序的时间,主要由建立初始堆和反复重建堆这两部分的时间开销构成。
平均性能
O(N*logN)。
其他性能
由于建初始堆所需的比较次数较多,所以堆排序不适宜于记录数较少的文件。
堆排序是就地排序,辅助空间为O(1).
它是不稳定的排序方法。
看一下动画演示的过程。
下面给大家留一道Testfan学员遇到的面试题,欢迎大家在文章下面留言
如果想知道参考答案,大家可在后台回复【堆排序】关键字
或加小编微信:13671081106 查看参考答案
题目如下 :
建堆时候所用的数据结构是什么?
推荐阅读:
以上是关于懂得堆排序算法,就能当架构师!-Testfan打卡学测开1015的主要内容,如果未能解决你的问题,请参考以下文章