懂得堆排序算法,就能当架构师!-Testfan打卡学测开1015

Posted 自动化软件测试

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了懂得堆排序算法,就能当架构师!-Testfan打卡学测开1015相关的知识,希望对你有一定的参考价值。


本期技术分享讲师   Arthur老师

题目内容:什么是堆排序

本期语音讲解

懂得堆排序算法,就能当架构师!-Testfan打卡学测开1015
本期文字解析
        堆排序(Heapsort)是指利用堆积树(堆)这种数据结构所设计的一种排序算法,它是选择排序的一种。可以利用数组的特点快速定位指定索引的元素。堆分为大根堆和小根堆,是完全二叉树。大根堆的要求是每个节点的值都不大于其父节点的值,即A[PARENT[i]] >= A[i]。在数组的非降序排序中,需要使用的就是大根堆,因为根据大根堆的要求可知,最大的值一定在堆顶。

【定义】
        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),故它们均是堆,其对应的完全二叉树分别如小根堆示例和大根堆示例所示。

懂得堆排序算法,就能当架构师!-Testfan打卡学测开1015

        大根堆和小根堆:根结点(亦称为堆顶)的关键字是堆里所有结点关键字中最小者的堆称为小根堆,又称最小堆。根结点(亦称为堆顶)的关键字是堆里所有结点关键字中最大者,称为大根堆,又称最大堆。注意:①堆中任一子树亦是堆。②以上讨论的堆实际上是二叉堆(Binary Heap),类似地可定义k叉堆。

【高度】
        堆可以被看成是一棵树,结点在堆中的高度可以被定义为从本结点到叶子结点的最长简单下降路径上边的数目;定义堆的高度为树根的高度。我们将看到,堆结构上的一些基本操作的运行时间至多是与树的高度成正比,为O(logN)。

【算法分析】
 堆排序的时间,主要由建立初始堆和反复重建堆这两部分的时间开销构成。

平均性能
O(N*logN)。

其他性能
由于建初始堆所需的比较次数较多,所以堆排序不适宜于记录数较少的文件。
堆排序是就地排序,辅助空间为O(1).
它是不稳定的排序方法。

        看一下动画演示的过程。

懂得堆排序算法,就能当架构师!-Testfan打卡学测开1015


懂得堆排序算法,就能当架构师!-Testfan打卡学测开1015
Python测试开发面试题

下面给大家留一道Testfan学员遇到的面试题,欢迎大家在文章下面留言


如果想知道参考答案,大家可在后台回复【堆排序】关键字


或加小编微信:13671081106 查看参考答案


题目如下 :

        建堆时候所用的数据结构是什么?

懂得堆排序算法,就能当架构师!-Testfan打卡学测开1015

推荐阅读:











以上是关于懂得堆排序算法,就能当架构师!-Testfan打卡学测开1015的主要内容,如果未能解决你的问题,请参考以下文章

软考高级系统架构师是什么来头?考上了就能当架构师了吗

软考高级系统架构师是什么来头?考上了就能当架构师了吗

做好性能测试必须要会的jvm—Testfan打卡学测开1120

Java进阶之路——从初级程序员到架构师,从小工到专家

从程序员进阶到架构师,6大核心技能要领详解

jsonpath原来这么简单!—Testfan打卡学测开1228